【发布时间】:2014-06-24 16:04:51
【问题描述】:
以下是我的套接字服务器的部分代码。我不清楚一些步骤,所以我有一些问题。我的问题如下:
- 为什么我需要使用 while (1)?
- 退出 (-1) 的目的是什么,它会关闭我的套接字吗?
- 为什么 data_len 被初始化为 1?
- 如果服务器运行并且客户端没有数据,那么服务器会发生什么?它会被关闭吗?
其实我需要对下面这部分代码做一个详细的解释。
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);
【问题讨论】:
-
谨慎使用
recv返回的结果。连接关闭时返回零(即 false),出错时返回-1(非零,因此为 true)。
标签: c sockets serversocket socketserver localserversocket