一个关于send的问题

yeswhb 2000-12-26 02:07:00
各位大虾:我想调用winsock api的send函授发送一个结构给对方,对方收到后,却没有还原,怎么解决。
我的程序结构如下:
typedef struct tagABC
{
CString a;
CString b;
}ABC;

.....
ABC abc;
send(sock, (char*)&abc, sizeof(abc), 0);
.....
对方
ABC def;
CString a, b;
recv(sock, (char*)&def, sizeof(def), 0);
a = def.a;
b = def.b;
但结果a和b什么都没有,应该怎样正确传送一个结构呢?请大家帮忙。
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
55787关注!
wistaria 2000-12-26
  • 打赏
  • 举报
回复
send(sock, (char*)&abc, sizeof(abc), 0);
发送的只是sizeof(ABC)长度的数据,怎么可能得到a,b的值呢
flywhc 2000-12-26
  • 打赏
  • 举报
回复
传送结构体是没问题,类就不成了。
CString类里的数据是个指针指向具体的数据。send只能发送指针而不能发送数据。
xubin_sh的程序好象没有注意到,如果数据长的话,可能会分几次收到,也可能一次收到几个包合并在一起。
TCP协议的数据是流,应该把包合并起来处理,不能当一个一个的数据包来看待。这样必须加特殊的标志
xubin_sh 2000-12-26
  • 打赏
  • 举报
回复
CString里面好象有指针!

int l;
l=(abc.a).GetLength();
send(sock,(const char *)&l,sizeof(l),0);
send(sock,(const char *)abc.a,l,0);
l=(abc.b).GetLength();
send(sock,(const char *)&l,sizeof(l),0);
send(sock,(const char *)abc.b,l,0);


int l;
char * buf;
recv(sock,(char*)&l,sizeof(l),0);
buf = new char[l + 1];
recv(sock,buf,l,0)
buf[l]='\0';
def.a = buf;
delete[] buf;

recv(sock,(char*)&l,sizeof(l),0);
buf = new char[l + 1];
recv(sock,buf,l,0)
buf[l]='\0';
def.a = buf;
delete[] buf;

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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