我要发帖 回复

正式会员

9

主题

92

积分

0

专家分

:

私信
发表时间 : 2009-6-16 10:40:09 | 浏览 : 2259    评论 : 14
现在找到了个关于vega网络通信的MFC基本框架,是基于UDP多播的,服务器可以按照仿真生成数据正常运行,但客户端无法接收到服务器发出的数据(数据是关于角色的坐标x,y,z,h,p,r,事实上这些数据发生变化的只有r一个值)。
    自己反复调试了很久但也没成功,下面把所有c++源代码贴出来,请好心人给我帮帮忙看一下,
上传用了很久,估计你要是解压再看也比较麻烦,如果您需要整个工程的话,可以把邮箱留下,我发到你的邮箱方便您阅读和调试。
    这里先向热心人说声:多谢了



后面附上主要收发程序:
服务器发送程序
        while ( f<*l1 )
        {                       /* forever */
                vgSyncFrame ();  //帧同步处
                vgFrame (); //当前帧处理
                Sleep(50);    //暂停50 ms

       
                {
                       
                        {
                                if(f<*l1)
                                {
                                        r0=*(R1+f);
                               
                                                  r1=*(R2+f);
                  
                                             f=f+1;
                                             UpdateData(FALSE);
                                }

                                mess.h1_dir=h0;        mess.p1_dir=p0;        mess.r1_dir=r0;
                                mess.x1_pos=x0;        mess.y1_pos=y0;        mess.z1_pos=z0;
                                    mess.h2_dir=h1;        mess.p2_dir=p1;        mess.r2_dir=r1;
                                mess.x2_pos=x1;        mess.y2_pos=y1;        mess.z2_pos=z1;


                                if(group_flag==1)
                                {
                                        if(!m_Socket.SendTo(mess))        // Send message + NULL
                                        AfxMessageBox("Send Failed!");

                                }               

                                vgPosVec(pos0,x0,y0,z0,h0,p0,r0);//设置初始位置矢量坐标
                vgPosVec(pos1,x1,y1,z1,h1,p1,r1);//设置初始位置矢量坐标
                vgPos(plyr0,pos0);//给角色赋值
                vgPos(plyr1,pos1);//给角色赋值
                               
                        }
                }
        }
       


客户端接收程序
void CMulticastSocket::OnReceive(int nErrorCode)
{
        Message mess;
        int nError = ReceiveFrom(&mess, sizeof(Message), m_strSendersIP, m_nSendersPort);
        if(nError == SOCKET_ERROR)
                AfxMessageBox("Error receiving data from the host group");
        else
        {
                if (!bForceNoLoopback || (bForceNoLoopback && !(m_strSendersIP == m_strLocalIP && m_nSendersPort == m_nLocalPort)))
                {
                        // 1. If loopbackback is not to be forced then interface handles the loopback itself
                        // 2. If you have to loopback and SOCKOPT LOOPBACK fails, no problem, interfaces loopback by default
                        // 3. If you have to stop loopback and SOCKOPT LOOPBACK fails, ignore messages coming from your own sending socket

                        // TODO : Add your code for here. The packet received is in m_strBuffer
                        bDataReceived = TRUE;        /* Making note that a message has arrived */
                }
        }

                         h0=mess.h1_dir;
                         p0=mess.p1_dir;
                        r0=mess.r1_dir;
                        xpos_0=mess.x1_pos;
                        ypos_0=mess.y1_pos;
                        zpos_0=mess.z1_pos;

                        h1=mess.h2_dir;
                        p1=mess.p2_dir;
                        r1=mess.r2_dir;
                        xpos_1=mess.x2_pos;
                        ypos_1=mess.y2_pos;
                        zpos_1=mess.z2_pos;

                        h2=mess.h3_dir;
                        p2=mess.p3_dir;
                        r2=mess.r3_dir;
                        xpos_2=mess.x3_pos;
                        ypos_2=mess.y3_pos;
                        zpos_2=mess.z3_pos;


                //        MessageBox(NULL,"zasgb",NULL,MB_OK);
       

        CAsyncSocket::OnReceive(nErrorCode);
}

[ 本帖最后由 shiweizhen123 于 2009-6-16 10:44 AM 编辑 ]

JoinGroupDlg.cpp.rar

681 Bytes, 下载次数: 47

JoinGroupDlg.h.rar

751 Bytes, 下载次数: 38

matlabenginetestView.cpp.rar

3.98 KB, 下载次数: 37

生成仿真所需数据(含发送程序)

matlabenginetestView.h.rar

1.2 KB, 下载次数: 38

MulticastSocket.cpp.rar

1.97 KB, 下载次数: 43

通信主程序

MulticastSocket.h.rar

1.15 KB, 下载次数: 44

以上6个文件为服务器程序

JoinGroupDlg1.cpp.rar

672 Bytes, 下载次数: 40

以下八个为客户端文件

JoinGroupDlg1.h.rar

737 Bytes, 下载次数: 44

MulticastSocket.cpp.rar

2.15 KB, 下载次数: 44

通信主程序(含接收程序)

MulticastSocket.h.rar

1.15 KB, 下载次数: 34

ShipView.cpp.rar

1.16 KB, 下载次数: 31

ShipView.h.rar

976 Bytes, 下载次数: 32

zsVegaView.cpp.rar

2.57 KB, 下载次数: 35

zsVegaView.h.rar

1.08 KB, 下载次数: 34

最近VR访客

sdsd2000 评论于2009-6-16 13:59:52
客户端无法接收到服务器发出的数据?
方便的话发给我我研究一下,156827198@qq.com
谢谢

评分

参与人数 1积分 +21 收起 理由
shiweizhen123 + 21 谢谢

查看全部评分

shiweizhen123 评论于2009-6-16 15:04:03

回复 2楼 的帖子

谢谢您的关注,期待您的回复,也期待其他热心人的帮助
humaxwell 评论于2009-6-17 18:26:52
你的客服端和服务端是同一台计算机吧

评分

参与人数 1积分 +21 收起 理由
shiweizhen123 + 21 帮助我多次了,呵呵,谢谢

查看全部评分

shiweizhen123 评论于2009-6-18 08:49:31

回复 4楼 的帖子

谢谢你的多次帮助
是分在两台计算机上的,
根据防火墙提示,服务器发生了创建监听端口 和 发送UDP数据的网络动作;
客户端只发生了创建监听端口的动作,却没有接受数据的提示
我现在正在加紧学习UDP多播,希望能尽早修正好程序,也期待热心人的帮助!

[ 本帖最后由 shiweizhen123 于 2009-6-18 08:57 AM 编辑 ]
superhit 评论于2009-8-20 13:54:25
算我一个
superhit 评论于2009-8-20 13:55:09
humaxwell 评论于2009-8-25 16:45:08
看了下你的服务器端和客户端,发现都没用用到套接字,用UDP多播不需要套接字吗
david_m 评论于2009-9-8 18:18:13
本帖最后由 david_m 于 2009-9-8 06:19 PM 编辑

你先把主机与客户机的防火墙关掉试试,有可能是防火墙的事情。
shiweizhen123 评论于2009-9-13 10:52:00
问题已经解决,看来通信的源程序没有问题,谢谢大家热心帮助
opop 评论于2009-11-25 09:15:08
下载不了,都是错误文件呀
zxy007zxy 评论于2010-1-29 19:28:15
可以发一份完整的程序给我吗?谢谢。zxy.007.zxy@163.com
oceantu 评论于2010-3-12 09:09:28
你的服务器根本没有发出数据.
ggw0122 评论于2011-4-10 12:51:36
谢谢分享
liuludjmm 评论于2011-12-4 22:20:58
分布式vega多播网络通信问题(附件内含全部源代码)问题解决了吗?可以发个完整程序吗?liuludjmm@163.com

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-9-20 08:31 PM

返回顶部