您的位置:程序门 -> vc/mfc -> 网络编程



用udp发送结构体,同样的接收函数用本地回路可以成功,而远程发送缺接不到,高手来..


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用udp发送结构体,同样的接收函数用本地回路可以成功,而远程发送缺接不到,高手来..[已结贴,结贴人:jia_yn]
发表于:2007-05-11 11:33:58 楼主
具体代码如下:
结构体类型:
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的内容。但换成远程地址后,收到的就是乱码了。而且内容可变。


!!!如何解决!!!


发表于:2007-05-11 11:50:221楼 得分:5
本地回路还同一进程吧?
发表于:2007-05-11 11:54:172楼 得分:0
对,是同一进程。是因为同一进程的原因才使得程序能接受到数据么?
这是什么原因?
发表于:2007-05-12 17:30:283楼 得分:10
知道字节对齐吗?
发表于:2007-05-13 15:19:394楼 得分:0
这个问题大概明白了,是说内存便宜问题吧。cstinrg   类型在传递过程中会变长度。是这个原因吧。
发表于:2007-05-14 09:41:105楼 得分:0
不应该的问题。
发表于:2007-05-14 12:49:096楼 得分:15
cstring   的成员是一个字符串头的指针

你把指针发送出去了   而没有把字符串发送出去!!!!!
发表于:2007-05-15 18:52:007楼 得分:0
搬个凳子坐下听讲


快速检索

最新资讯
热门点击