簡體   English   中英

c ++ Winsock發送,recv-他們的工作方式

[英]c++ Winsock send,recv -how they work

我是網絡編程的新手,我正在嘗試理解發送和recv等功能如何在TCP連接下工作。我知道在客戶端和服務器之間的連接中,例如,當客戶端設法發送時一條消息發送到服務器,消息被分成不同的包,當它到達時,服務器部分檢查包的總和是否與發送前相同,如果沒有,它會將消息發送回客戶端作為批准。如果出現問題,客戶端將重新發送該消息。

我不明白的是,如果你從客戶端發送一條消息,你在服務器上睡10秒鍾,你仍然可以在客戶端做你想做的事情,比如send函數在另一個線程中執行,或者你使用在這10秒內多次發送功能,消息作為該時間內使用的消息的組合到達。

如果有人能解釋一下情況,我將非常感激!

這是由您的操作系統的TCP / IP網絡堆棧實現的。

TCP / IP堆棧......

  • 提供發送緩沖區。 程序發送時,操作系統首先填充內部緩沖區。 您的應用程序可以立即發送,直到緩沖區已滿。 然后你的發送將阻止。
  • 從內部緩沖區獲取數據並以單個數據包將其發送到網絡。
  • 通過網絡接收數據並使用該數據填充內部接收緩沖區。
  • 當您調用receive時,為您的程序提供來自內部緩沖區的數據。
  • 負責TCP / IP協議的工作,如建立連接,確認收到的數據,如果沒有收到接收確認,則重新發送數據。

在您編寫的情況下,客戶端正在填充發送方OS的發送緩沖區和接收方OS的接收緩沖區。 您的客戶端可以發送非阻塞,直到兩個緩沖區都已滿。 然后它將阻塞,直到服務器再次調用recv。

暫無
暫無

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

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