前面这篇文章已经实现了:
Linux环境下TCP服务器和客户端的搭建
接下来需要完成客户端与服务器的相互通信。
在上文中,是通过read/write来实现读取数据和发送数据的,要同时实现收与发,是否将read ,write都加在客户端和服务器就可以了呢?
来先看一下:
server.c
char buf[1024];
memset(buf,0,sizeof(buf));
while(1){
//memset(buf,0,sizeof(buf));
ret = read(connfd,buf,sizeof(buf));
if(ret < 0){
perror("read:");
break;
}else if(ret == 0){
printf("write close!\n");
break;
}else{
printf("recv:%s\n",buf);
}
//发数据
//memset(buf,0,sizeof(buf));
printf("send: ");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;
ret = write(connfd,buf,sizeof(buf));
if(ret < 0){
perror("write");
break;
}
}
client.c
char buf[1024];
memset(buf,0,sizeof(buf));
while(1){
printf("send: ");
fgets(buf,sizeof(buf),stdin);
buf[strlen(buf)-1] = 0;
ret = write(sockfd,buf,sizeof(buf));
if(ret < 0){
perror("write");
break;
}
if(strncmp(buf,"quit",4) == 0){
break;
}
//收数据
memset(buf,0,sizeof(buf));
ret = read(sockfd,buf,sizeof(buf));
if(ret < 0){
perror("read:");
break;
}else if(ret == 0){
printf("write close!\n");
break;
}else{
printf("recv:%s\n",buf);
}
}
在服务器和客户端都加入了read,write函数,可以实现客户端和服务器的通信,消息互传,但是上面的代码中可以发现一个问题,客户端和服务器的消息只能一条一条的发送,不能一次性发送多条消息,不然消息会一直在缓存中,发不出去 ,造成这个问题的原因是什么呢?