2013-09-24 30 views
-1

我是套接字編程的初學者。我正在尋找示例c代碼來補償tcp是基於流的事實,即一個發送客戶端可能不等於服務器中的recv。補償TCP流套接字的示例C代碼?

我如何確保當我從客戶端發送類似這樣的消息:

strcpy(send_data, "Hello Server"); 
send(sock,send_data,strlen(send_data), 0); 

它就會在服務器端收到確切..

我知道,TCP是基於流,使消息可能會被分段,並且可能需要在服務器上進行多次recv調用以獲取整個消息。

但是,我如何讓服務器繼續接收,直到收到完整的消息?

我知道它背後的理論.. 我用C(爲客戶端和服務器端最好是全碼)尋找例子

+1

「優選客戶端和服務器端的完整代碼」。查看Stevens Unix網絡編程書。 –

+0

對於套接字編程,您可能會發現舊的但很好的[Beej's guide](http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html)。 –

回答

0

首先,創建一個協議。如果它總是一個c風格的字符串,你可以找一個NUL終結符。

然後,當您讀取數據並將其放入緩衝區時,您會收到它。然後你解析緩衝區尋找你的終結者,處理數據(無論對你的應用程序意味着什麼),並將它從緩衝區中刪除。

這也是您的發送方式,因爲您永遠不知道在每次發送呼叫時會發送多少數據。把你想要發送的內容放到本地緩衝區,調用發送,然後刪除本地緩衝區實際發送的很多字節。

另外,Stack Overflow不是一個讓人們指點示例代碼的網站 - 這就是Google。這是發佈代碼的地方,讓人們可以幫助您找出問題所在。