当前位置: 技术问答>linux和unix
我在写通信程序时,用read()函数来接收对方的信息,但有时把对方的两笔数据当成一笔来读,这个问题应怎样避免?
来源: 互联网 发布时间:2015-01-23
本文导语: 我用read()读数据,当rc=read()==0时,我就对数据进行处理!(我是这样来判断一笔数据的,这样对不对?还是有别的更好的方法? | 采用断连接试试亚。 长连接方式有时是这样的,你必须有一...
我用read()读数据,当rc=read()==0时,我就对数据进行处理!(我是这样来判断一笔数据的,这样对不对?还是有别的更好的方法?
|
采用断连接试试亚。
长连接方式有时是这样的,你必须有一定包头包尾区分,否则没有办法。
长连接方式有时是这样的,你必须有一定包头包尾区分,否则没有办法。
|
你先READ长度然后READ包体
|
利用带外数据传输数据,对实时性要求不很严格的应用来说,不值得
但是接收带外数据有个特点,就是可以分开带外数据的前后两个块,一次read决不可能读出两块数据,哪怕是各自的一小块
你这个问题根本没有必要搞得这么复杂。建议好好读读原理方面的东西,也不至于如此瞎子摸象。一次读出两块数据,实属正常,分开的方法多得很
但是接收带外数据有个特点,就是可以分开带外数据的前后两个块,一次read决不可能读出两块数据,哪怕是各自的一小块
你这个问题根本没有必要搞得这么复杂。建议好好读读原理方面的东西,也不至于如此瞎子摸象。一次读出两块数据,实属正常,分开的方法多得很
|
定义报头:你自定格式
定义报体:固定长度
定义回执头:自定格式
定义回执:自定格式
按顺序发送,接受,万物意识
定义报体:固定长度
定义回执头:自定格式
定义回执:自定格式
按顺序发送,接受,万物意识
|
tcp是字节流,消息包的划分,只能靠应用自己解决。我见到的做法就是用消息头指定长度。
|
你需要重新做消息包的格式,也就是说,你要告诉程序每次读取信息的长度,可以这样考虑:
首先读五个特殊字符,这是包头,包头的首字节是固定的,然后是四个自己的包体长度,根据这些,再读取包体长度的信息就可以了
首先读五个特殊字符,这是包头,包头的首字节是固定的,然后是四个自己的包体长度,根据这些,再读取包体长度的信息就可以了