2014-06-25 31 views
-1

我已經創建了一個客戶端服務器程序並已成功運行它。代碼寫在下面。但while (1)循環對我來說並不清楚,我不確定爲什麼我在這裏使用fgets,爲什麼該標誌被設置爲零?詳細的解釋將會有所幫助。套接字客戶端程序中的錯誤

套接字客戶端代碼:

while (1) 

    { 

     fgets(input, BUFFER, stdin); 
     send (sock, input, strlen(input),0); 

     len = recv(sock, output, BUFFER, 0); 
     output [len]='\0'; 
     printf("%s\n", output); 
    } 

    close(sock); 
} 

回答

1

錯誤是strln()在您的程序中不可用。使用strlen()而不是strln()

解釋,而(1):

在這裏,而(1)從用戶獲取輸入並傳送到另一個插座。 recv等待由另一個套接字發送的消息。這只是發送和接收消息。

使用一些測試條件來破壞語句,如if(strcmp(input,"END") == 0) break;否則它會一再地繼續工作。

+0

希望你會根據問題編輯你的答案。 – user3751012

1

我想你想使用strlen(input)。你錯過了一個e。

+0

請再次檢查問題。 – user3751012

2

我認爲錯字在你的代碼

使用strlen代替strln

EDIT

while(1)

fgets(input, BUFFER, stdin); 

此行得到的用戶輸入並將其存儲在緩衝器input高達最大長度BUFFER

send (sock, input, strlen(input),0); 

此線發送的數據包(這裏input)到所連接的插座與描述符sock

len = recv(sock, output, BUFFER, 0); 

這條線從連接的套接字接收到一個消息與描述符sock並且在成功接收數據的,長度收到的數據返回到len。接收到的數據將存儲在output緩衝區中,output緩衝區大小爲BUFFER

output [len]='\0'; 

NULL Terminator結束收到的數據。

因此,它基本上從用戶獲取數據,將其發送到連接的套接字並從該連接的套接字接收響應。

此外,您還認爲why the flag is set to 0表示此標誌指定影響recv/send函數的行爲。但是,如果你不想使用任何國旗,那麼只需使它0

您可以檢查其他值如何使用recvsend函數。

+0

請根據queston編輯您的答案。 – user3751012

+0

@ user3751012編輯了答案。 –