簡體   English   中英

如何在c ++套接字tcp / ip中意外地發送和接收數據以及確認?

[英]how to send and receive data and acknowledgement asynchrounously in c++ socket tcp/ip?

如何在c ++套接字tcp / ip中意外地發送和接收數據以及確認?我可以在程序中看到50次發送145字節數據時,我將收到前六個確認,因為要花一些時間才能收到確認。 我嘗試等待直到收到當前發送的數據的確認,但是這花費了很長時間,我不想這樣做。 我想處理數據。 所以我以為我會把接收放在一個單獨的線程中。 並且我想在發送發生時同時處理接收? 那么異步接收會起作用嗎? 有人可以幫忙嗎? 我用來接收和發送數據的類是靜態類。 因為我需要從其他兩個類調用以將數據發送到相同的IP和端口。

您可以使用套接字在一個線程中同時發送數據和在另一個線程中接收數據。 您不能做的是在同一套接字上通過不同的線程執行相同的操作(發送或接收)。

但是,如有必要,請始終嘗試避免添加新線程。 您可以使用一些套接字函數( selectWSAEventSelect ),這些函數將在可以對套接字執行讀/寫操作時通知您。 將它們放在一個線程中的循環中,等待事件並處理它們-在同一線程中讀/寫。 如果您需要處理接收到的數據並且花費時間,請將接收到的數據存儲在與另一個數據處理線程共享的隊列中。 當然,請記住,您需要使此隊列成為線程安全的,並同步套接字和數據處理線程。

如果在Posix系統上,則可能需要一個多路復用系統調用,例如pollppollpselectselect

如果您的系統不是Posix(例如Windows),則應該找到一些類似的功能或使用線程。

暫無
暫無

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

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