用UDP发送结构体,同样的接收函数用本地回路可以成功,而远程发送缺接不到,高手来.该如何处理
用UDP发送结构体,同样的接收函数用本地回路可以成功,而远程发送缺接不到,高手来..
具体代码如下:
结构体类型:
struct SendMsgNodeinfo{
CString m_csEquipName; //设备名称
CString m_csEquipStyle; //设备类型
CString m_csEquipShowName; //设备显示名
CString m_csIPAddr; //IP地址
BOOL m_bNoteState; //设备存活状态
BOOL m_bNoteSNMP; //设备是否支持SNMP
};
发送端:
SendMsgNodeinfo NodeMsg;
............//主要是填充结构体(省略)
sendto(m_socket,(char*)(&NodeMsg),sizeof(NodeMsg),0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
接收端:
char recvBuf[1024];
memset(recvBuf,0,1024);
recvfrom(sock,recvBuf,1024,0,(SOCKADDR*)&addrFrom,&len);
SendMsgNodeinfo *nodeinfo;
nodeinfo=(SendMsgNodeinfo*)recvBuf;
AfxMessageBox(nodeinfo-> m_csEquipName);
注:如果是本地回路地址,上面的AfxMessageBox函数可以正确弹出m_csEquipName的内容。但换成远程地址后,收到的就是乱码了。而且内容可变。
!!!如何解决!!!
------解决方案--------------------
本地回路还同一进程吧?
------解决方案--------------------
知道字节对齐吗?
------解决方案--------------------
CString 的成员是一个字符串头的指针
你把指针发送出去了 而没有把字符串发送出去!!!!!
具体代码如下:
结构体类型:
struct SendMsgNodeinfo{
CString m_csEquipName; //设备名称
CString m_csEquipStyle; //设备类型
CString m_csEquipShowName; //设备显示名
CString m_csIPAddr; //IP地址
BOOL m_bNoteState; //设备存活状态
BOOL m_bNoteSNMP; //设备是否支持SNMP
};
发送端:
SendMsgNodeinfo NodeMsg;
............//主要是填充结构体(省略)
sendto(m_socket,(char*)(&NodeMsg),sizeof(NodeMsg),0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
接收端:
char recvBuf[1024];
memset(recvBuf,0,1024);
recvfrom(sock,recvBuf,1024,0,(SOCKADDR*)&addrFrom,&len);
SendMsgNodeinfo *nodeinfo;
nodeinfo=(SendMsgNodeinfo*)recvBuf;
AfxMessageBox(nodeinfo-> m_csEquipName);
注:如果是本地回路地址,上面的AfxMessageBox函数可以正确弹出m_csEquipName的内容。但换成远程地址后,收到的就是乱码了。而且内容可变。
!!!如何解决!!!
------解决方案--------------------
本地回路还同一进程吧?
------解决方案--------------------
知道字节对齐吗?
------解决方案--------------------
CString 的成员是一个字符串头的指针
你把指针发送出去了 而没有把字符串发送出去!!!!!