2011-03-11 53 views
1

我是套接字編程的新手。需要將多個字符串逐個發送到服務器並收集結果字符串。使用套接字逐個發送多個字符串的問題

現在的問題是,在客戶端使用發送/寫入功能,所有的字符串都是從服務器中讀取的。

//client.c 
sendString(serversocket,"str1"); 

sendString(serversocket,"str2"); 

sendString(serversocket,"str3"); 

//server.c 

char *buff=readstring(clientsocket); 

printf("%s",buff) ;//output : str1str2str2 

需要去str1str2str3 ...

我需要它收到了一個又一個。我怎樣才能做到這一點?任何幫助,將不勝感激。

回答

3

TCP套接字是字節流 - 您將不得不在接收端拆分數據。

對於字符串,您可以在例如這兩種方法之一:

客戶:

  • 發送一個整數長度
  • 發送字符串數據

服務器:

  • 讀整數長度
  • 將這個數量的字節讀入一個字符串

或者,你可以使用0終止:

客戶:

  • 發送一個字符串後面是0字節

服務器:

  • 閱讀儘可能掃描0字節,提取字符串

你將不得不同時處理這兩種情況在服務器端:

  • 服務器接收每次調用recv()
  • 服務器1個字節接收一個呼叫的所有數據recv()
+0

謝謝埃裏克.....我實施了這個,這工作得很好......學習需要處理你提到的以上兩種情況... – Muse 2011-03-11 10:59:36

0

我假設你在這裏使用TCP。在這種情況下,發送到套接字的任何內容都被視爲流。所以你必須在流中添加分隔符來分割字符串。您可以在每個字符串後面發送一個換行符,然後解析輸入以再次分割行。

0

由於TCP是一個字節流,因此需要劃定數據段,即邏輯數據包。在這種情況下,換行符'\ n'可能是最明顯的選擇,或者您可以使用空字符'\ 0'。

//client.c 
sendString(serversocket,"str1\n"); 

sendString(serversocket,"str2\n"); 

sendString(serversocket,"str3\n"); 

然後,您可以使用類似strtok砍輸入數據到它的組件的邏輯分組。

相關問題