MFC socket传送struct结构,接收端出现乱码

2025-05-19 07:43:52
推荐回答(3个)
回答1:

(char*)(&PCDrive + isend) 改为:(char*)(&PCDrive) + isend
接收部分也这么改一下:(char*)(&PCDrive2) + irecv

原因在于,(char*)(&PCDrive + isend) 运行时,会先取结构指针,然后结构指针加上偏移,等于向后移动了多少个结构;你本来就只有一个结果,只要移动一个,指针指向的地址就是非法的了;所以发送和接收的都是乱码;

你这个表现应该是偶尔乱码,偶尔又正常

回答2:

处理不对。这样就可以了
send( SOCK , (char*)PCDrive, sizeof(PCDriver), 0);
将结构体的指针强制转换为char*型,比如结构体为13个字节,转换后就像是包含13个字符的字符数组。如果结构体大小是4的整数倍,也可以转换为void*型。

回答3:

不需要用while,你这里的数据这么少。
还有,接收缓冲区这么写char buff[256];调用recv,然后强制转换成DriverInfo。
参考我写的:
http://blog.csdn.net/zhoujielunzhimi/article/details/8190601