如何在C++ socket tcp/ip中異步發送和接收數據和確認?,我可以在我的程序中看到當發送一些145字節的數據50次時,我將收到前六個確認,因爲它需要時間給予承認。我嘗試等待,直到收到當前發送的數據確認信息,但這需要很長時間,我不想這樣做。我想處理數據。所以我認爲我會把收到在一個單獨的線程。我想在發送過程中同時處理接收?所以異步接收將工作?誰能幫忙?我用來接收和發送數據的類是一個靜態類。因爲我需要從另外兩個類中調用才能將數據發送到相同的IP和端口。如何在C++ socket tcp/ip中異步發送和接收數據和確認?
1
A
回答
1
您可以使用套接字同時在一個線程中發送數據並在另一個線程中接收數據。你不能做的事情是從不同的線程在同一個套接字上執行相同的動作(發送或接收)。
儘管如此,總是儘量避免添加新的線程,如果不必要的話。您可以使用一些套接字函數(select,WSAEventSelect),它們會在您可以在套接字上執行讀取/寫入時通知您。把它們放入單個線程的循環中,等待事件並處理它們 - 在同一個線程中讀/寫。如果您需要處理收到的數據並且需要時間,請將接收到的數據存儲在與另一個數據處理線程共享的隊列中。當然,請記住,您需要使此隊列線程安全並同步套接字和數據處理線程。
+1
或使用完成端口... – neagoegab
+0
+1進行評論。我同意,如果需要擴展性,完成端口是最好的(如果不是唯一的話)選擇。 –
0
相關問題
- 1. 在Android中發送和接收Socket Java
- 2. 異步套接字C#發送數據但未收到
- 3. 如何發送和接收數據的TCP套接字(C/C++)
- 4. 發送和接收Java Socket錯誤
- 5. Raw Socket Linux發送/接收數據包
- 6. 如何同步發送和接收?
- 7. 發送和接收在UDP中的C
- 8. 以C#接收和發送數據
- 9. 發送和接收數據
- 10. 使用數據報UDP發送和接收確認
- 11. java socket編程問題(發送和接收數據)
- 12. 使用一個Socket來發送和接收數據
- 13. 發送和接收進度監控插座異步
- 14. Java Socket - 如何在3點之間發送和接收信息?
- 15. 如何發送和接收來自外部附件的數據異步
- 16. C++發送和接收套接字
- 17. 緩衝類和發送/接收數據
- 18. 異步發送和收聽與amqp.node
- 19. 發送/接收怪異數據
- 20. 如何確保Socket發送數據?
- 21. 通過TCP接收和發送數據
- 22. 多個客戶端異步連接,同步發送/接收
- 23. 發送和接收int C++
- 24. 確認在Xamarin表格中發送和接收SMS
- 25. 使用套接字發送和接收數據c
- 26. 的Python:異步發送/接收正常插座和HTTP連接
- 27. 套接字接收和發送數據端口C
- 28. 在php和perl之間發送和接收數據的問題?
- 29. 通過C#套接字正確發送和接收?
- 30. 如何在iphone中使用藍牙發送和接收數據?
什麼平臺?更好地使用boost:asio ... – neagoegab
Windows平臺。 – Ershad
除非它是一箇舊協議,否則在使用'SOCK_STREAM'套接字時,您確實不需要確認,因爲它已內置到底層TCP協議中。我不明白在不同的線程中接收/發送會是一個問題,但我從來沒有嘗試過,所以我很好奇它是如何發生的。但是如果你不想等待Ack,爲什麼不直接發送所有的數據,等待Ack?只需將接收緩衝區設置得足夠大以適應所有情況。 –