Socket中结构体数据的传输

noairman 2010-03-21 02:30:01
我服务端和客服端是这样在类外定义的
typedef struct Data
{
//int order;
CString filedata[4][100];
}DataPacket;
服务端:
int sended;
for (int j=0;j<5;j++)
{
MessageBox(ThreadData.filedata[0][j]);
}
for(int i=1;i<=csnum;i++) if(csrev[i])
if( sended=csrev[i].Send((char*)&ThreadData,sizeof(ThreadData),0))
{
CEdit *ce=((CEdit*)GetDlgItem(IDC_EDIT_CONTENT));
ce->LineScroll(ce->GetLineCount()-1);;
MessageBox("数据发送成功");
}
每次调试出sended都是1600,就是说已经发送过去了。
客服端:
clconect.Receive((char*)&ServerData,sizeof(ServerData),0);
int len=sizeof(ServerData);
每次单步调试收到的len也为1600.表示也收到了数据,为什么在后面这两句就错了,就要死,是我哪里错了吗,请大家帮我看看,我纠结了好久啊……
CString str=ServerData.filedata[0][1];
MessageBox(str);

其中在服务端类中定义有:Data ThreadData;
客服端类中定义有:Data ServerData;
...全文
217 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cattycat 2010-03-21
  • 打赏
  • 举报
回复
CString str=ServerData.filedata[0][1];
这个ServerData是什么类型?也是个结构体?这么转换有问题,网络字节流不一定跟你的对象在内存中是一样的。还要考虑到内存对齐的因素。
noairman 2010-03-21
  • 打赏
  • 举报
回复
还是没有对,在对那一行单步调试的时候,就是死,出现“Unhandled exception in Client.exe(MFC42D.dll):0xC0000005;Access violation”,要是不单步调试,有时就会直接死了,有时就弹出乱码的对话框,我是不是前面哪里有错误啊……
  • 打赏
  • 举报
回复

CString str=ServerData.filedata[0][1];//这种初始化方式有保证吗?CString中有重载赋值操作符?

//还是用构造函数吧!
CString str(ServerData.filedata[0][1]);
已经博主授权,源码转载自 https://pan.quark.cn/s/d4b876d19b7b 在计算机网络编程领域Socket API作为一个通用的通信界面,为程序提供了通过网络途径实现数据交换与接收的功能。 本议题将详细阐释如何运用UDP(User Datagram Protocol)协议借助Socket API来传输结构化数据,并对其进行解析。 UDP是一种非连接型且不可靠的传输机制,相较于TCP,其资源消耗更低且传输速率更快,但无法确保数据传输的顺序性和完整性。 现在让我们深入认识UDP套接字的基础操作。 建立一个UDP套接字一般包含以下流程:1. 调用`socket()`函数,并明确指定协议族(PF_INET)和协议种类(SOCK_DGRAM),以此创建一个UDP套接字。 2. 通过`bind()`函数将套接字与本地IP地址及端口号进行关联,此步骤虽为可选项,但通常用于确定数据发送与接收的端口。 3. 选用`sendto()`函数将数据发送至特定的目标地址和端口。 由于UDP的非连接特性,每次数据发送都必须提供完整的接收方信息。 4. 运用函数`recvfrom()`来接收数据,该函数会返回数据发送者的地址和端口,以及接收到的数据内容。 接下来,我们将探讨如何发送结构体数据结构体在C/C++编程是一个核心概念,它能够将多种不同类型的数据项整合为一个复合实体。 为了实现结构体的发送,我们需要将其转化为字节流,因为网络传输本质上处理的是二进制信息。 可以使用`htonl()`, `htons()`, `ntohl()`, `ntohs()`这些用于网络字节序与主机字节序间转换的函数,来确保数据在网络上的准确表达。 例如,假设存在一个简单的结构体定义如下:```cstruct MyS...

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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