我正在使用C#中的一个简单的hello world TCP / IP客户端服务器应用程序,我无法让我的客户端连接。有人可以提供任何其他故障排除步骤我开始没有想法......
以下是相关的代码部分:
服务器:
Console.Out.WriteLine("About to bind address");
IPAddress ipAd = IPAddress.Parse("127.0.0.1");
Console.Out.WriteLine("Choose a port to bind...");
String port = Console.In.ReadLine();
int iPort = Int32.Parse(port);
TcpListener myList = new TcpListener(ipAd, iPort);
myList.Start();
Console.WriteLine("The server is running at: "+myList.LocalEndpoint);
Console.WriteLine("Waiting for a connection.....");
Socket s = myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);
客户端:
Console.Out.WriteLine("enter address: ");
string address = Console.In.ReadLine();
Console.Out.WriteLine("enter port: ");
int port = Convert.ToInt32(Console.In.ReadLine());
TcpClient tcpclnt = new TcpClient();
Console.WriteLine("Connecting.....");
Console.Out.WriteLine("Address: " + address + ":" + port);
tcpclnt.Connect(address, port);
我可以从客户端计算机ping服务器,但是我无法使用绑定端口telnet到服务器。我尝试了各种端口(少数端口在8000以下,少数在40000左右)。我已在两个系统上禁用Windows防火墙。系统连接到不在互联网上的路由器。我尝试使用和不使用端口转发设置将给定端口上的传入请求转发到服务器计算机而不起作用。
我能够捕获的唯一例外是客户端抛出:
无法建立联系,因为 目标机器主动拒绝 它
我检查过InnerException
,但似乎没有 - 这是基本的例外。那可能是对的吗?
不确定我应该注意什么 - 任何其他故障排除步骤都会有所帮助。
谢谢!
答案 0 :(得分:9)
我之前遇到过这种情况。诀窍是绑定到0.0.0.0
而不是127.0.0.1
。绑定到127.0.0.1
时,服务器将只接受来自localhost的连接。绑定到0.0.0.0
它将接受所有请求。
您也可能希望nmap来自客户端的主机,并查看它看到的打开的端口。
编辑:如果您在其中硬编码机器的IP地址,则侦听器将仅侦听该网络接口。如果您使用0.0.0.0
,则侦听器将侦听所有可用的网络接口。这包括计算机与USB连接手持设备,第二个网卡或VPN链接之间的接口。
答案 1 :(得分:6)
上面的代码正在侦听来自环回地址的请求。这实际上只会侦听该网络上的连接,并且该网络仅包含您的计算机。
您是否尝试过侦听绑定到网络的地址?在本地网络上,它应该类似于192.168.x.x或10.x.x.x
答案 2 :(得分:3)
在您的计算机上尝试netstat -al
(确切的命令行因Windows和unix而异)并查看服务器是否正在侦听端口
答案 3 :(得分:1)
为什么不使用.NET远程处理?它比做TCP / IP客户端服务器更好。您可以在对象之间传递消息。
答案 4 :(得分:1)
您是否尝试在同一台计算机上运行客户端服务器以确保首先建立连接?除此之外,尝试使用路由器分配的或运行服务器的机器的静态IP与绑定到环回。