C#套接字问题

时间:2019-02-21 13:21:52

标签: c# sockets tcp

我用电缆连接到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上看起来都是一样的,并且以相反的方式可以正常工作,那么可能是什么问题?

1 个答案:

答案 0 :(得分:3)

当您开发服务器/客户端体系结构时,通常足以使它们都在同一台计算机上运行并让它们通过回送IP地址进行通信。通常,网络代码并不关心另一端是否在同一台计算机,同一台交换机或Voyager 2探针上(嗯,它们确实有点在意,因为延迟很高)。

如果您在部署/测试中遇到问题,那么具有99%的可支持性意味着您要解决的是网络问题,而不是编程问题。有时会进行一些必要的更改(例如公开用于设置代理设置的选项)。但是调试将首先是网络操作。

我的第一个猜测是针对防火墙(包括Windows内置的防火墙)的。然后,类似于NAT层之类的功能类似于防火墙。