我用电缆连接到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上看起来都是一样的,并且以相反的方式可以正常工作,那么可能是什么问题?
答案 0 :(得分:3)
当您开发服务器/客户端体系结构时,通常足以使它们都在同一台计算机上运行并让它们通过回送IP地址进行通信。通常,网络代码并不关心另一端是否在同一台计算机,同一台交换机或Voyager 2探针上(嗯,它们确实有点在意,因为延迟很高)。
如果您在部署/测试中遇到问题,那么具有99%的可支持性意味着您要解决的是网络问题,而不是编程问题。有时会进行一些必要的更改(例如公开用于设置代理设置的选项)。但是调试将首先是网络操作。
我的第一个猜测是针对防火墙(包括Windows内置的防火墙)的。然后,类似于NAT层之类的功能类似于防火墙。