C#套接字问题

问题描述 投票:1回答:1

我用电缆连接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上的设置看起来都一样,反之亦然,所以可能是什么问题?

c# sockets tcp
1个回答
3
投票

当您开发服务器/客户端体系结构时,通常就可以让它们在同一台机器上运行并让它们通过Loopback IP地址进行通信。作为一般规则,网络代码不关心另一端是否在同一台计算机上,相同的交换机 - 或Voyager 2探测器(好吧,他们确实关心一点,因为延迟非常高)。

如果您在部署/测试中遇到问题,那么99%的可用性就是处理网络问题,而不是编程问题。有时会有一些必要的更改(比如公开设置代理设置的选项)。但调试首先是网络操作。

我的第一个猜测是针对防火墙(包括内置于Windows中的防火墙)。然后是类似防火墙的东西,比如NAT层。

© www.soinside.com 2019 - 2024. All rights reserved.