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端口的。
我想可能是我监听的模式不对。
请问怎样才能实现另外那个软件一样的端口监听呢? 展开
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端口的。
我想可能是我监听的模式不对。
请问怎样才能实现另外那个软件一样的端口监听呢? 展开
展开全部
监听的模式没有问题,原因出在其他方面,下面首先来分析你的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分的题目回答起来还有些积极性。
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 广告
2023-07-25 广告
StormProxies是一家提供动态代理服务器服务的企业,旨在帮助用户更好地管理网络访问和安全。以下是一些关于StormProxies的IP动态代理服务的特点:1. 高匿名性:StormProxies的动态代理服务器具有高匿名性,可以有效...
点击进入详情页
本回答由Storm代理提供
展开全部
这是我曾经做过的一个聊天软件的部分关于侦听部分的代码,你参考一下。
另外注意,侦听应该在辅助线程中调用。
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) {
}
}
另外注意,侦听应该在辅助线程中调用。
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) {
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你确定那段代码运行时那个端口有数据进入吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没看出什么问题……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询