当前位置: 技术问答>linux和unix
问个TCP的发送接收问题
来源: 互联网 发布时间:2015-12-04
本文导语: 在网络的二端(tcp/ip连接),发送端不断的send(一个结构指针) 接收端不断的recv(一个结构大小) 那么接收到的是不是一定是一个完整的结构?可能出现只发送了一个结构的一半数据吗?如果可能是否需要使用缓冲保存?...
在网络的二端(tcp/ip连接),发送端不断的send(一个结构指针)
接收端不断的recv(一个结构大小)
那么接收到的是不是一定是一个完整的结构?可能出现只发送了一个结构的一半数据吗?如果可能是否需要使用缓冲保存?再根据缓冲的大小是否满足sizeof(结构)后再去解吸
接收端不断的recv(一个结构大小)
那么接收到的是不是一定是一个完整的结构?可能出现只发送了一个结构的一半数据吗?如果可能是否需要使用缓冲保存?再根据缓冲的大小是否满足sizeof(结构)后再去解吸
|
光发送结构指针没有用,接收端是收不到这个结构里的数据。
|
可能出现你说的情况,比如数据包太大需要进行ip层的分片,如果发送了一半网络断了,而你接收端用了非阻塞方式,或者原始数据包的形式,那就出现你的情况了。如果你使用tcp套接字我觉得不会出现你说的问题了。
|
不会!但是最好不要直接传结构,历史已经证明这不是一个好方法(wall就是一个例子)
|
TCP可以窥探数据的大小,可以用这个方法试试。
一般在传输的时候转为char传输。
结构体可能由于系统的区别,导致结构体在不同系统上的大小不同。
一般在传输的时候转为char传输。
结构体可能由于系统的区别,导致结构体在不同系统上的大小不同。
|
linaxing(孩子她爹)
为什么不会?
一端是原始套节子,一端是tcp套节子
为什么不会?
一端是原始套节子,一端是tcp套节子
|
学习
|
接收buffer的size無嚴格限制﹐但要比結構的大﹐2倍以上最好﹐結構的前面几個字節定義為起始位﹐接收到它并且size足夠﹐就用memcpy copy到接收的結構中去
主要注意兩點﹐能足夠准確的辯別起始位(應該是多個字節)﹐從起始位開始﹐Size足夠。
如果必要的話﹐結構的后面加一個CRC Check作正確性檢查
主要注意兩點﹐能足夠准確的辯別起始位(應該是多個字節)﹐從起始位開始﹐Size足夠。
如果必要的話﹐結構的后面加一個CRC Check作正確性檢查
|
linaxing(孩子她爹)
为什么不会?
一端是原始套节子,一端是tcp套节子
===============================
人家说了是用TCP/IP,所以不会
为什么不会?
一端是原始套节子,一端是tcp套节子
===============================
人家说了是用TCP/IP,所以不会
|
自己定分隔符。TCP包可能会发生粘连的。
|
结构会有字节续对齐问题,最好不要用结构传输