我正在编写一个简单的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
,这应该没问题。
我尝试了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流量捕获)
我也遇到了同样的问题。与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