网络编程——5. 基于TCP的服务器端/客户端(2)

5.1 回声客户端的完美实现

前面提到,服务器希望通过调用1次write函数传输数据,但如果数据太大,操作系统可能把数据分成多个数据包发送到客户端 ,而之前的回声客户端是这么写的在这里插入图片描述
你可以清楚的看到,客户端传输的是字符串,而且是通过write一次性发送的。之后还调用一次read,期待接收自己传输的字符串
实际的情况是,在此过程中,客户端有可能在尚未接收到全部的数据包时就调用了read函数
Q:既然回声客户端会收到所有字符串数据,是否只需要多等一会过一段时间再调用read来一次性读取所有字符串数据?
A:的确可以,但要等多久?10分钟你能接受吗?显然不能,我们肯定希望在收到字符串数据时立刻读取并输出。

回声客户端问题解决方法

其实很容易解决,可以提前确定接收数据的大小

若之前传输了20字节长的字符串,则在接收时循环调用read函数读取20个字节即可
在这里插入图片描述

计算器服务器端/客户端示例

1)写程序之前,定义如下应用层协议
-①客户端连接到服务器端后以1字节整数形式传递待算数字的个数
-②客户端向服务器端传递的每个整型数据占用4个字节
-③传递整型数据后接着传递运算符,运算符信息占用1个字节
-④选择字符+、-、*之一去传递
在这里插入图片描述
-⑤服务器端以4个字节整型数向客户端传回运算结果
-⑥客户端得到运算结果后终止与服务器端的连接

程序分析

1)服务器端

在这里插入图片描述
在这里插入图片描述

2)客户端

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值