c# -Server / c++ Client: Socket.Accept()永远不会结束

本文关键字:永远 结束 Accept Socket -Server c++ Client | 更新日期: 2023-09-27 18:03:07

我正在编写一个简单的c++客户端,它应该连接到c#服务器。而且,当客户端运行良好,甚至声称它发送了一堆咬,c#服务器从来没有通过listener.Acceppt():

Console.WriteLine("Waiting for a connection...");
// Program is suspended while waiting for an incoming connection.
Socket handler = listener.Accept();

我从这里取了服务器源:Microsoft MSDN:同步服务器套接字示例

我使用的客户端代码可以在这里找到:Microsoft MSDN:完整的Winsock客户端代码

我还检查了服务器与相应的c#客户端,这工作得很好。我还检查了客户机的返回值,这看起来也很合理。所以我猜问题出在c++/c#如何处理细节上。

我尝试Wireshark查找一些提示,但不可思议的是,在使用的端口(11000)上绝对没有任何通信的痕迹。

我应该从哪里开始寻找解决这个问题?

Update:当前所有通信仅在本地运行。我尝试了我的IPAddress(从ipconfig)和127.0.0.1服务器和客户端。

我只安装了一个网络适配器,我使用那个IP地址。客户端检查getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result)并返回有效信息(例如TCP作为协议)。connect()返回0,这应该没问题。

更新2:

我尝试了c++/c#服务器-客户端设置的不同组合:

  • c++ -Server, c++ Client: Works
  • c++ -Server, c# Client: Works
  • c# -Server, c# Client: Works
  • c# -Server, c++ Client: Does not work
  • c# -Server, putty: Works

更新3:我在其他服务器-客户端星座上尝试了Wireshark,但它们都没有显示tcp.port == 11000上的任何流量,尽管它们确实工作(参见更新2)。看起来Wireshark没有显示任何结果,因为一切都只是本地的(参见Wireshark localhost流量捕获)

c# -Server / c++ Client: Socket.Accept()永远不会结束

我也遇到了同样的问题。与winsock的连接是异步的。您使用的c#示例是同步的。你必须使用一个异步示例来与你的c++代码进行通信。

我用了这两个例子!

C Sharp服务器https://msdn.microsoft.com/en-us/library/fx6588te (v = vs.110) . aspx

C + +客户端https://msdn.microsoft.com/en-us/library/windows/desktop/ms737591 (v = vs.85) . aspx