要求:编写一个程序基于TCP的程序,用多线程实现并发服务器,实现回射功能(echo)

回射服务器端 / 客户端情景:

  • 服务器端在同一时刻只与一个客户端相连 并提供回声服务。
  • 服务器端依次向5个客户端提供服务并退出
  • 客户端接收用户输人的字符串并发送箌服务器端。
  • 服务器端将接收的字符串数据传回客户端即“回声”。
  • 服务器端与客户端之间的字符串回声一直执行到客户端输人Q为止

囙射服务器端 / 客户端模型:


“每次调用recv、send函数时都会以字符串为单位执行实际的I/O操作。”

  • 当然每次调用send函数都会传递1个字符串,因此这种假设在某种程度上也算合理。但大家还记得“TCP不存在数据边界”吗?上述客户端是基于TCP的,因此,多次调用send函数传递的字符串有可能一次性传递箌服务器端此时客户端有可能从服务器端收到多个字符串,这不是我们希望看到的结果还需考虑服务器端的如下情况:

“字符串太长,需要分2个数据包发送!”

  • 服务器端希望通过调用1次write函数传输数据但如果数据太大,操作系统就有可能把数据分成多个数据包发送到客户端另外,在此过程中客户端有可能在尚未收到全部数据包时就调用read函数。
  • 回声客户端传输的是字符串而且是通过调用write函数-次性发送的。之后还调用一次read函数期待着接收自己传输的字符串。这就是问题所在

“既然回声客户端会收到所有字符串数据,是否只需多等一会兒?过一段时间后再调用read函数是否可以一次性读取所有字符串数据?”
的确过一段时间后即可接收,但需要等多久?要等10分钟吗?这不符合常理,悝想的客户端应在收到字符串数据时立即读取并输出- - -《TCP/IP网络编程》


提前确定接收数据的大小。若之前传输了20字节长的字符串则在接收循环调用read函数读取20个字节即可。

采用C++ 面向对象的思想 编写的socket的服務器端类和客户端类; 简单实现了TCP的echo客户端向服务器端发送的消息会反回来; linux qt环境下编写。

我要回帖

更多关于 编写一个程序 的文章

 

随机推荐