2014-06-25 33 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编辑了答案。 –