簡體   English   中英

C#-服務器/ C ++客戶端:Socket.Accept()永遠不會完成

[英]C#-Server / C++ Client: Socket.Accept() never finishes

我正在編寫一個應該連接到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)上絕對沒有任何通信的痕跡。

我應該從哪里着手解決這個問題?

更新:目前所有通信僅在本地運行。 我為服務器和客戶端嘗試了我的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 ++-Server,C#客戶端:有效
  • C#服務器,C#客戶端:有效
  • C#服務器,C ++客戶端:不起作用
  • C#-Server, 膩子 :有效

更新3:我在其他服務器-客戶端星座上嘗試了Wireshark,但是它們都沒有顯示tcp.port == 11000上的任何流量,盡管它們確實起作用(請參閱更新2)。 看起來Wireshark沒有顯示任何結果,因為所有內容都只是本地的(請參閱Wireshark本地主機流量捕獲

我有同樣的問題。 與winsock的連接是異步的。 C#中使用的示例是同步的。 您必須使用一個異步示例來與C ++代碼進行通信。

我用這兩個例子!

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

C plus加客戶端https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms737591(v=vs.85).aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM