我写了这个:
客户端:
printf("\nType a string: (STOP to ending connection)\n\n");
do{
while ((c = getchar ()) != '\n' && i < MAXLENGHT){
buf[i++] = c;
}
buf[i] = '\0';
len = strlen(buf);
}
while( strcmp(buf,"STOP")!=0);
close(sockfd);
exit(0);
}
服务器:
int main (int argc, char **argv) {
int sock, fd;
socklen_t client_len;
struct sockaddr_in server, client;
if ((sock = socket (AF_INET, SOCK_STREAM, 0)) == -1) {
perror ("Socket failed");
exit (1);
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = htonl(INADDR_ANY);
server.sin_port = htons (SERVER_PORT);
if (bind ( sock, (struct sockaddr *) &server, sizeof server) == -1) {
perror ("bind failed");
exit (2);
}
listen (sock,1);
while (1) {
client_len = sizeof (client);
if ((fd = accept ( sock, (struct sockaddr *) &client, &client_len)) < 0) {
perror ("accepting connection");
exit(3);
}
fprintf (stderr, "\nOpen.\n");
send (fd, "\nWelcome!\n", 50, 0);
check_stats (fd, fd);}
close(fd);
fprintf (stderr, "\nClose\n");
exit (0);
}
void check_stats(int in, int out)
是服务器接收字符串,执行某些操作并将其发送回客户端的功能。 我的问题是: 在服务器的代码中,我必须放在
之前close(fd)
当用户键入“STOP”时,服务器结束,但在结束之前,它会向客户端发送另一个BYE字符串?
我遇到了问题recv(int sockfd, void *buf, size_t len, int flags);
功能。在我的主要内容中,我必须把它作为
int sockfd
答案 0 :(得分:0)
sockfd指的是用于与服务器通信的套接字。 http://linux.die.net/man/2/recv
这是函数原型:ssize_t recv(int sockfd,void * buf,size_t len,int flags);
如果您考虑一下,您会看到如果您没有使用正在使用的套接字提供该功能,那么它将如何知道从何处获取数据?