Linux基础网络编程:TCP服务器与客户端的通信

前面这篇文章已经实现了:
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函数,可以实现客户端和服务器的通信,消息互传,但是上面的代码中可以发现一个问题,客户端和服务器的消息只能一条一条的发送,不能一次性发送多条消息,不然消息会一直在缓存中,发不出去 ,造成这个问题的原因是什么呢?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值