服务端的代码:
socklen_t clilen;
struct sockaddr_in servaddr,cliaddr;
要是换一下顺序变成:
struct sockaddr_in servaddr,cliaddr;
socklen_t clilen;
更换顺序后,运行的时候并不能与客户端进行正常通信,求解求解~
1.有客户端开多线程对服务器进行连接断开压力测试,在连接接近4000次时,再也连接不上服务器,过了段时间后恢复正常,而后再出现,如此往复.使用Prcess Explorer查看System Idle Process发现大量的TIME_WAIT状态下的Socket.
解析如下:
TCP TIME-WAIT 延迟断开TCP 连接时,套接字对被置于一种称为TIME-WAIT 的状态。这......
答案就在这里:TCP Socket编程的几点肮脏的问题
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?
http://blog.csdn.net/leo115/article/details/8044795
只是变量的声明而已,我觉得不可能,你把服务端代码贴上来
服务端代码:
#include
#include
#include
#include
#include
#include
#include
void huishe(int sockfd);
int main(int argc,char **argv)
{
int listenfd,connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in servaddr,cliaddr;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket error\n");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(9887);
if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
perror("bind error\n");
exit(2);
}
if(listen(listenfd,5)<0)
{
perror("listen error\n");
exit(3);
}
for(;;)
{
clilen=sizeof(cliaddr);
if((connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen))<0)
{
perror("accept error");
exit(4);
}
if((childpid=fork())==0) //child process
{
if(close(listenfd)<0)
{
perror("close listenfd error");
exit(5);
}
huishe(connfd);
exit(0);
}
if(close(connfd)<0) //parent close connfd
{
perror("close connfd error");
exit(6);
}
}
exit(0);
}
void huishe(int sockfd)
{
char buf[4096];
ssize_t n;
while((n=read(sockfd,buf,4096))>0)
printf("client:%s\n",buf);
}
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
void huishe(int sockfd);
int main(int argc,char **argv)
{
int listenfd,connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in servaddr,cliaddr;
if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket error\n");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(9887);
if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
perror("bind error\n");
exit(2);
}
if(listen(listenfd,5)<0)
{
perror("listen error\n");
exit(3);
}
for(;;)
{
clilen=sizeof(cliaddr);
if((connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen))<0)
{
perror("accept error");
exit(4);
}
if((childpid=fork())==0) //child process
{
if(close(listenfd)<0)
{
perror("close listenfd error");
exit(5);
}
huishe(connfd);
exit(0);
}
if(close(connfd)<0) //parent close connfd
{
perror("close connfd error");
exit(6);
}
}
exit(0);
}
void huishe(int sockfd)
{
char buf[4096];
ssize_t n;
while((n=read(sockfd,buf,4096))>0)
printf("client:%s\n",buf);
}
发了三次代码才弄好~发现没法删除评论啊
出现的问题详细描述一下,是不是由于之前的端口还处于绑定状态?