TCP 套接字 - 如何连接到服务器套接字,然后关闭它并再次连接?
TCP Socket - How to connect to server socket, then close it and connect again?
这段代码不是 100% 正确,但我需要我的程序来做这样的事情。
客户
fd = socket(AF_INET,SOCK_STREAM,0);
if(fd==-1) exit(1);
n = connect(fd,res->ai_addr,res->ai_addrlen);
if(n==-1) exit(1);
char buffer[128] = read(fd,buffer,128);
if(strcmp(buffer,"Done\n")==0) close(fd);
n = connect(fd,res->ai_addr,res->ai_addrlen);
if(n==-1) exit(1);
bzero(buffer,128);
read(fd,buffer,128);
if(strcmp(buffer,"Done\n")==0) close(fd);
服务器
listenfd = socket(AF_INET,SOCK_STREAM,0);
if(listenfd == -1) exit(1);
n=bind(listenfd,res2->ai_addr, res2->ai_addrlen);
if(n==-1) exit(1);
if(listen(listenfd,10) == -1) exit(1);
while(1){
User_fd = accept(listenfd,(struct sockaddr*)&addr2,&addrlen2);
if(User_fd == -1){
perror("accept");
exit(1);
}
char buffer[5] = "Done\n";
write(User_fd,buffer,5);
close(User_fd);
}
当我第二次尝试连接时,出现错误“文件描述符错误”。每次我们需要再次连接时,我都尝试在客户端上创建一个新套接字,但这会影响我拥有的其他套接字(使用不同的服务器),我认为这不是一件好事。
一个套接字不能连接两次,无论其间是否关闭。必须创建一个新套接字。
这段代码不是 100% 正确,但我需要我的程序来做这样的事情。
客户
fd = socket(AF_INET,SOCK_STREAM,0);
if(fd==-1) exit(1);
n = connect(fd,res->ai_addr,res->ai_addrlen);
if(n==-1) exit(1);
char buffer[128] = read(fd,buffer,128);
if(strcmp(buffer,"Done\n")==0) close(fd);
n = connect(fd,res->ai_addr,res->ai_addrlen);
if(n==-1) exit(1);
bzero(buffer,128);
read(fd,buffer,128);
if(strcmp(buffer,"Done\n")==0) close(fd);
服务器
listenfd = socket(AF_INET,SOCK_STREAM,0);
if(listenfd == -1) exit(1);
n=bind(listenfd,res2->ai_addr, res2->ai_addrlen);
if(n==-1) exit(1);
if(listen(listenfd,10) == -1) exit(1);
while(1){
User_fd = accept(listenfd,(struct sockaddr*)&addr2,&addrlen2);
if(User_fd == -1){
perror("accept");
exit(1);
}
char buffer[5] = "Done\n";
write(User_fd,buffer,5);
close(User_fd);
}
当我第二次尝试连接时,出现错误“文件描述符错误”。每次我们需要再次连接时,我都尝试在客户端上创建一个新套接字,但这会影响我拥有的其他套接字(使用不同的服务器),我认为这不是一件好事。
一个套接字不能连接两次,无论其间是否关闭。必须创建一个新套接字。