【发布时间】:2024-01-20 07:12:01
【问题描述】:
我正在编写一个应该连接到 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: Synchronous Server Socket Example
我使用的客户端代码可以在这里找到:Microsoft MSDN: Complete Winsock Client Code
我还使用C# client 来检查服务器,它运行良好。我还检查了客户端的返回值,这看起来也很合理。所以我猜问题出在 C++ / C# 如何处理细节上。
我尝试 Wireshark 寻找一些提示,但奇怪的是,在使用的端口 (11000) 上绝对没有任何通信痕迹。
我应该从哪里着手解决这个问题?
更新:目前所有通信都只在本地进行。我为服务器和客户端尝试了我的 IPAddress(来自ipconfig)和127.0.0.1。
我只安装了一个网络适配器,我使用那个 IP 地址。客户端检查getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result) 并返回有效信息(例如 TCP 作为协议)。 connect() 返回0,应该没问题。
更新 2: 我尝试了 C++/C# Server-Client-Setups 的不同组合:
- C++-服务器、C++ 客户端:工作
- C++-服务器,C# 客户端:工作
- C#-服务器,C# 客户端:工作
- C#-服务器、C++ 客户端:不起作用
- C#-服务器,putty:工作
更新 3: 我在其他服务器-客户端星座上尝试了 Wireshark,但它们都没有在 tcp.port == 11000 上显示任何流量,尽管它们确实有效(参见更新 2)。看起来 Wireshark 没有显示任何结果,因为一切都只是本地的(见 Wireshark localhost traffic capture)
【问题讨论】:
-
什...什么?只是为了确定 - 你是说客户端连接正常并发送数据,但服务器 accept() 从未返回?
-
' 尝试 Wireshark 寻找一些提示,但奇怪的是,在使用的端口 (11000) 上绝对没有任何通信的痕迹' - 检查你的 IP 地址......你没有与你的服务器通信认为你是。
-
我只安装了一个网络适配器,我使用那个 IP 地址。客户端检查
getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result)并返回有效信息(例如 TCP 作为协议)。connect()返回0,应该没问题。 -
如果客户端确实连接到您认为的服务器,我想不出任何方式可以在客户端成功连接并且 accept() 不会在服务器返回。
-
我尝试更改一些小东西,例如更改服务器上的端口,但不更改客户端:连接失败。将客户端端口更改为与服务器相同的值:连接成功...