我已经创建了一个客户端服务器程序并且已经成功运行了。代码写在下面。但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);
}
答案 0 :(得分:2)
我认为你的代码中有拼写错误
使用strlen代替strln
。
修改强>
在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
。
答案 1 :(得分:1)
我认为你想使用strlen(input)
。你错过了一个电子邮件。
答案 2 :(得分:1)
错误是strln()在您的程序中不可用。使用strlen()
代替strln()
。
while(1)的解释:
这里while(1)从用户获取输入并发送到另一个套接字。 recv等待另一个套接字发送的消息。这只是发送和接收消息。
使用某些测试条件来破坏语句,例如if(strcmp(input,"END") == 0) break;
否则它会一次又一次地继续工作。