C#套接字问题

标签 c# sockets tcp

我用电缆连接到 PC 以尝试模拟服务器\客户端。服务器开始在特定端点监听,有时稍后客户端会连接。一切顺利,我确定一个连接(端口)的最大速度约为 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 上的设置看起来都一样,并且以相反的方式工作正常,那么可能是什么问题?

最佳答案

当您开发服务器/客户端架构时,通常让两者在同一台机器上运行并让它们通过环回 IP 地址进行通信就足够了。作为一般规则,网络代码不关心另一端是在同一台计算机上、同一个交换机上还是在 Voyager 2 探测器上(好吧,他们确实有点关心,因为延迟非常高)。

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

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

关于C#套接字问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54808145/

相关文章:

c# - 按钮.PerformClick();不在表单加载中工作

c# - 如何恢复与 WCF 的连接?

python - 超时后 urlopen 调用不会在超时后终止

sockets - TCP套接字服务器使用spring集成同时处理多个客户端连接

c# - 知道网络流何时关闭

c# - 从c#插入数据库

c# - C#中资源文件的动态引用

c - 将套接字绑定(bind)到计算机的地址以进行监听

c - 如何测量 beaglebone black 上的 TCP/IP 吞吐量?

c# - 在 .net c# 中使用 ssl Stream 从 Tcp.Client.Socket 发送数据