以下是我的套接字服务器的一部分代码。我不清楚一些步骤,所以我有一些问题。我的问题如下:
实际上,我需要对代码的以下部分进行详细说明。
while(1) {
if ((new = accept(sock, (struct sockaddr*)&client, &sockaddr_len)) == ERROR) {
perror ("accept");
exit (-1);
}
printf("New client connected from port no %d and IP %s\n",ntohs(client.sin_port), inet_ntoa(client.sin_addr));
data_len = 1;
while (data_len) {
data_len = recv (new, data, MAX_DATA, 0);
if (data_len) {
send (new, data, data_len, 0);
data [data_len]='\0';
printf("Sent mesg: %s", data);
}
}
printf("Client Disconnected\n");
close(new);
}
close (sock);
答案 0 :(得分:3)
如果要在完成第一个连接后接受新连接,则需要再次执行相同的代码以接受和处理新连接。最简单的方法是使用某种循环。
exit
功能只会退出您的流程。通常,这将关闭所有打开的套接字以及释放所有其他打开/分配的资源。该功能不会返回。
如果您没有初始化data_len
变量,则其值将是不确定的,使用它将导致undefined behavior。至少如果变量是局部非静态变量。
如果客户端没有数据,recv
调用将无限期阻止。
答案 1 :(得分:2)
while(1)
与
相同while(true)
这意味着永远循环直到有一个中断但在这种情况下它不是while(1)它while(data_len> 0)
exit(-1)
将以退出代码-1结束程序。通常意味着有错误
data_len初始化为1,以便代码进入while循环。这个值在循环的第一行被覆盖,所以1的值并不重要
答案 2 :(得分:1)
1它是永远循环,因为C没有本机布尔类型,它使用整数,1是真的
2关闭应用程序的那个,在初始化套接字时它在if语句下,因此套接字甚至没有创建
3与#1相同是使while语句为真
4如果没有连接客户端,服务器将继续运行
答案 3 :(得分:1)
while (1)
只是永远循环,或直到程序退出。
exit(-1)
导致程序以非零值退出(这意味着发生了错误)。程序使用的资源在程序存在时被释放,所以是的,套接字将被关闭。
datalen
初始化为1,因此while循环体将执行。
如果没有传入数据,假设您没有创建非阻塞套接字,程序将耐心等待数据。