问个TCP的发送接收问题

zly1980 2006-07-11 10:52:16
在网络的二端(tcp/ip连接),发送端不断的send(一个结构指针)
接收端不断的recv(一个结构大小)
那么接收到的是不是一定是一个完整的结构?可能出现只发送了一个结构的一半数据吗?如果可能是否需要使用缓冲保存?再根据缓冲的大小是否满足sizeof(结构)后再去解吸
...全文
513 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zly1980 2006-07-17
  • 打赏
  • 举报
回复
lear19820104(峰) ( ) 信誉:84
结构会有字节续对齐问题,最好不要用结构传输-都是C++写的,用了#pragma pack(1)
郁闷,一个说会粘连一个说不会粘连
lear19820104 2006-07-16
  • 打赏
  • 举报
回复
结构会有字节续对齐问题,最好不要用结构传输
zly1980 2006-07-15
  • 打赏
  • 举报
回复
jammyxu() :主要注意兩點﹐能足夠准確的辯別起始位(應該是多個字節)﹐從起始位開始﹐Size足夠。
你的意思是发送的时候:
MyStruct senddata;
char sendbuf[];
sprintf(sendbuf,"%s",flagstring);
memcpy(sendbuf+flagstring,&senddata,sizeof(senddata));
memcpy(sendbuf+flagstring_len+sizeof(senddata),"CRCCODE",len of crccodelen);
send(fd,sendbuf,flagstring_len+sizeof(senddata)+crccodelen);
是这样吗?
linaxing 2006-07-15
  • 打赏
  • 举报
回复
linaxing(孩子她爹)
为什么不会?
一端是原始套节子,一端是tcp套节子
===============================
人家说了是用TCP/IP,所以不会
i ama 2006-07-15
  • 打赏
  • 举报
回复
自己定分隔符。TCP包可能会发生粘连的。
zly1980 2006-07-15
  • 打赏
  • 举报
回复
但是接收的时候我接收多大的大小?
是每次请求的接收大小都是flagstring_len+sizeof(senddata)+crccodelen吗?
再分解一下里面的格式,把结构用MEMCPY提取出来是吧?
jammyxu 2006-07-14
  • 打赏
  • 举报
回复
接收buffer的size無嚴格限制﹐但要比結構的大﹐2倍以上最好﹐結構的前面几個字節定義為起始位﹐接收到它并且size足夠﹐就用memcpy copy到接收的結構中去

主要注意兩點﹐能足夠准確的辯別起始位(應該是多個字節)﹐從起始位開始﹐Size足夠。

如果必要的話﹐結構的后面加一個CRC Check作正確性檢查
zly1980 2006-07-14
  • 打赏
  • 举报
回复
结构体定义用了
#pragma pack(1)

#pragma pack()
sizeof()得到的大小是一样的。

playmud((猪头流氓)(鄙视老迈)(抵制日货):学习了什么是:一端是原始套节子?
我都是socket(AF_INET,SOCK_STREAM,0);
hundlom 2006-07-13
  • 打赏
  • 举报
回复
TCP可以窥探数据的大小,可以用这个方法试试。
一般在传输的时候转为char传输。
结构体可能由于系统的区别,导致结构体在不同系统上的大小不同。
orcd 2006-07-13
  • 打赏
  • 举报
回复
学习
playmud 2006-07-13
  • 打赏
  • 举报
回复
linaxing(孩子她爹)
为什么不会?
一端是原始套节子,一端是tcp套节子
zly1980 2006-07-12
  • 打赏
  • 举报
回复
select可以得到当前可读数据的大小吗?
linaxing 2006-07-12
  • 打赏
  • 举报
回复
不会!但是最好不要直接传结构,历史已经证明这不是一个好方法(wall就是一个例子)
playmud 2006-07-12
  • 打赏
  • 举报
回复
可能出现你说的情况,比如数据包太大需要进行ip层的分片,如果发送了一半网络断了,而你接收端用了非阻塞方式,或者原始数据包的形式,那就出现你的情况了。如果你使用tcp套接字我觉得不会出现你说的问题了。
sourceid 2006-07-12
  • 打赏
  • 举报
回复
光发送结构指针没有用,接收端是收不到这个结构里的数据。
zly1980 2006-07-12
  • 打赏
  • 举报
回复
linaxing(孩子她爹) ( ) 信誉:100 :具体点。
zly1980 2006-07-11
  • 打赏
  • 举报
回复
有关系吗?
typedef struct
{
int xx;
...
char buf[111];
}NAME;
累世这样的。
yingge 2006-07-11
  • 打赏
  • 举报
回复
怎么样的结构啊?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧