C# TCP/IP问题

我写了一段TCP/IP端口监听的代码:TcpListenerlistener=newTcpListener(IPAddress.Parse("127.0.0.1"),10... 我写了一段TCP/IP端口监听的代码:
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 10021);
listener.Start();

while (_Listen)
{
using (TcpClient client = listener.AcceptTcpClient())
{
using (StreamReader reader = new StreamReader(client.GetStream(), _TargetEnc))
{
........
}
}
}

用这段代码开始监听后,使用netstat命令查看活动中的端口中没有10021端口。而且也监听不到有数据输入。

但是10021这个端口确实是有数据输入的。因为我下载了另一个软件可以在10021端口监听到数据。而且这个软件在开始监听时,netstat命令查看活动中的端口中是有10021端口的。

我想可能是我监听的模式不对。
请问怎样才能实现另外那个软件一样的端口监听呢?
展开
 我来答
百度网友d242235
2010-04-07 · TA获得超过2385个赞
知道大有可为答主
回答量:1403
采纳率:84%
帮助的人:814万
展开全部
监听的模式没有问题,原因出在其他方面,下面首先来分析你的netstat命令

netstat:用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

netstat -a:显示所有连接和监听端口

似乎两条命令字面上看来没区别,其实不然,netstat所检测的是所有连接畅通的端口及IP,netstat -a监视的所有连接和“监听”端口,也就是说,如果本机运行着一个TCP监听,但尚未有客户端与此主机连接时,此命令也可以显示你的监听终端。
你的程序无法用netstat查看10021端口,不一定是程序监听失败,可能是此时并未有客户端连接过来,建议先用netstat -a命令来查看。

再说说程序本身,这个程序我现在看来,主机端的监听是没有问题的,那么问题就应该出现在客户端,而且出错的可能性很大在于客户端所绑定的主机端地址。
127.0.0.1是本地回环地址,操作系统中有一个配置文件将它与localhost绑定在一起。
你的TcpListener监听时绑定了127.0.0.1端口,那就是说,只有部署在本机的客户端程序才可以连接到你的主机,对吧,而且,客户端连接时必须要指定主机地址为127.0.0.1,这样的话对于主机端条件有些苛刻。即便客户端部署在本机,但连接到本机的真实IP(假设为192.168.0.1),那你的主机也是无法接收到连接的,客户端只会报出主机端积极拒绝的异常。

所以,现在的问题应该是主机端可以监听,但客户端连不上来。
我建议你修改主机端程序,将监听IP设置为任意客户端可连接。也就是,

TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 10021);
这行代码改为
TcpListener listener = new TcpListener(IPAddress.Any,10021);

一般来说,超过50分的题目回答起来还有些积极性。
Storm代理
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效... 点击进入详情页
本回答由Storm代理提供
西三227
2010-04-07 · TA获得超过1168个赞
知道小有建树答主
回答量:473
采纳率:0%
帮助的人:341万
展开全部
这是我曾经做过的一个聊天软件的部分关于侦听部分的代码,你参考一下。
另外注意,侦听应该在辅助线程中调用。

Private TcpListener listener

Private Sub 开始侦听_Click(object sender, System.EventArgs e);
{
thTcp = new Thread(new System.EventHandler(this.DoListen));
thTcp.Start();
}

private void DoListen()
{
localIP = Dns.GetHostEntry(Dns.GetHostName).AddressList(0);
try {
listener = new TcpListener(localIP, localPort);
listener.Start()
while (true) {
UserConnection client = new UserConnection(listener.AcceptTcpClient);
client.DataArrival += new System.EventHandler(this.DataArrival);

}
}
catch (Exception ex) {
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mach369
2010-04-07 · TA获得超过274个赞
知道小有建树答主
回答量:873
采纳率:0%
帮助的人:434万
展开全部
你确定那段代码运行时那个端口有数据进入吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友217a1b5
2010-04-07 · TA获得超过360个赞
知道小有建树答主
回答量:1415
采纳率:0%
帮助的人:431万
展开全部
没看出什么问题……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式