我用电缆连接PC,试图模拟服务器\客户端。服务器开始在特定的EndPoint上侦听,有时稍后客户端连接。一切顺利,我决定一个连接(端口)的最大速度约为24 Mbps。
所以现在我改变了角色,无法连接Socket.BeginConnect(ServerEndPoint, new AsyncCallback(OnConnectCallback), _ClientSocket)
超时并将localEndpoint设置为0.0.0.0
这是客户端的代码:
public void ConnectToServer(IPAddress iPAddress, int Port)
{
connected.Reset();
IPEndPoint ServerEndPoint = new IPEndPoint(iPAddress, Port);
try
{
_ClientSocket = new Socket(iPAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_ClientSocket.BeginConnect(ServerEndPoint, new AsyncCallback(OnConnectCallback), _ClientSocket);
connected.WaitOne();
// Here I would like to start async receiving but there's no connection
}
catch (SocketException)
{
// TODO:
}
}
private void OnConnectCallback(IAsyncResult result)
{
try
{
Socket client_StateSocket = (Socket)result.AsyncState;
client_StateSocket.EndConnect(result);
/// Here I get 0.0.0.0
connected.Set();
}
catch (SocketException)
{
// TODO:
}
}
服务器是从MSDN示例开始的。它开始侦听传入的连接,进入永久的while
循环并等待Socket.BeginAccept
触发(但它永远不会)。
我怀疑是防火墙,但两台PC上的设置看起来都一样,反之亦然,所以可能是什么问题?
当您开发服务器/客户端体系结构时,通常就可以让它们在同一台机器上运行并让它们通过Loopback IP地址进行通信。作为一般规则,网络代码不关心另一端是否在同一台计算机上,相同的交换机 - 或Voyager 2探测器(好吧,他们确实关心一点,因为延迟非常高)。
如果您在部署/测试中遇到问题,那么99%的可用性就是处理网络问题,而不是编程问题。有时会有一些必要的更改(比如公开设置代理设置的选项)。但调试首先是网络操作。
我的第一个猜测是针对防火墙(包括内置于Windows中的防火墙)。然后是类似防火墙的东西,比如NAT层。