当前位置: 技术问答>linux和unix
关于网络调用的问题
来源: 互联网 发布时间:2016-08-03
本文导语: 我写得C/S程序,利用Socket在服务器和客户端之间传递数据(阻塞模式)。 假如服务器端定义了FunA,FunB,FunC等功能调用。 当调用FunB的时候出现异常,返回数据不正常,比正常情况下多发了数据到客户端,而客户端按照正常接...
我写得C/S程序,利用Socket在服务器和客户端之间传递数据(阻塞模式)。
假如服务器端定义了FunA,FunB,FunC等功能调用。
当调用FunB的时候出现异常,返回数据不正常,比正常情况下多发了数据到客户端,而客户端按照正常接受数据。
这时候如果调用FunC,就会出现错误,因为收到的是FunB遗留在Socket中的数据。
这以后的所有调用全部失败,通讯处于混乱状态。
请问如何才能避免一次调用错误导致后面的连环通讯错误。
另外,能不能谈一下,服务器和客户端之间的功能调用通常怎么写。
|
|
因为TCP传送的是数据流。
会出现第4条所说的状况
http://blog.csdn.net/hairetz/archive/2009/05/29/4223234.aspx
你的需求可以认为是粘包导致的。可以参考这篇。
http://www.cnblogs.com/wzd24/archive/2007/12/24/1011932.html
会出现第4条所说的状况
http://blog.csdn.net/hairetz/archive/2009/05/29/4223234.aspx
你的需求可以认为是粘包导致的。可以参考这篇。
http://www.cnblogs.com/wzd24/archive/2007/12/24/1011932.html
|
一次把数据全部读出来,再处理,检测到数据错误,丢弃。
|
5楼,你看不到博文上标明的(转)字吗??
|
网络通信程序,首先要定义自己的数据交互协议。
一般的协议可以文本协议,以rn来表示一个请求和一个数据包终结。
如果是二进制协议,可以在每个数据包头部件上数据长度。
一般的协议可以文本协议,以rn来表示一个请求和一个数据包终结。
如果是二进制协议,可以在每个数据包头部件上数据长度。