0 0

Udp 发送成功 但是接收端 没有收到数据包 是为什么? 求关注 求分析 求解答5

想要实现的是一个UDP推送功能, 实现 把本机接收到的UDP数据 直接转发到另一个Point,相当于一个传送功能。

遇到的问题:在本机测试, 使用netport抓包工具 可以看到本机把收到的数据进行了向外发送,但是接收端(另一台机子)却没有抓到相应的包(没有一次抓到,应该不是UDP丢包的问题) 
测试环境:这里说的接收端既作为发送的数据源(使用UDP模拟发送器)也作为转发后的接收端  本机收到后 再转发给原来接收端; 这两台机子上的都有接收大量的UDP数据包(其他程序使用)

求关注 求分析 求解答
[size=16px][/size]
实现代码如下:
ublic partial class frmUdp : Form
    {
        //private UdpClient sendUdpClient;
        //private UdpClient receiveUpdClient;
        Socket sdsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        Socket recsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
[/b]
        public frmUdp()
        {
            InitializeComponent();
            //初始化页面信息
           
            int recePort = 4102;
           
            int sdPort = 5001;
            receivePort.Text = recePort.ToString();//接收端口
            sendPort.Text = sdPort.ToString ();//发送端口

            tbxPath.Text = Application.StartupPath;
        }
private void button1_Click(object sender, EventArgs e)
        {
            // 创建接收套接字
            try
            {
                IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
                IPAddress receiveIp = ips[0];//与信息中心连接的Ip           
                //IPEndPoint receIpEndPoint = new IPEndPoint(receiveIp, int.Parse(receivePort.Text));
                //receiveUpdClient = new UdpClient(receIpEndPoint);

                IPEndPoint rip = new IPEndPoint(receiveIp, int.Parse(receivePort.Text));
                //Socket recsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                [b]//绑定网络地址 
                recsock.Bind(rip);
[/b]                //IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
                IPAddress sendIp = ips[0];//与运控连接的Ip           
                //IPEndPoint sendIpEndPoint = new IPEndPoint(sendIp, int.Parse(sendPort.Text));
                /ndUdpClient = new UdpClient(sendIpEndPoint);
                IPEndPoint sip = new IPEndPoint(sendIp, int.Parse(sendPort.Text));
                //Socket sdsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
[b]                //绑定网络地址 
[b]
[/b]                sdsock.Bind(sip);
                //IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());


               Thread receiveThread = new Thread(ReceiveMessage);
                //Thread createFileThread=new Thread(CreateFile);

                receiveThread.Start();
                //createFileThread.Start();
            }
            catch(Exception ex)
            {
                Console.Out.Write(ex);
            }
        }

// 接收消息方法
        private void ReceiveMessage()
        {
           
            IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
            EndPoint remote= (EndPoint)remoteIpEndPoint;
            //IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.17"), 137);
            while (true)
            {
                try
                {
                    // 关闭receiveUdpClient时此时会产生异常
                    //byte[] receiveBytes = receiveUpdClient.Receive(ref remoteIpEndPoint);
                    byte[] recdata = new byte[1024];
                    int rec = recsock.ReceiveFrom(recdata, ref remote);
                    byte[] receiveBytes = new byte[rec];
                    Buffer.BlockCopy(recdata, 0, receiveBytes, 0, rec);
                    //启动发送线程
                    Thread threadSend = new Thread(new ParameterizedThreadStart(SendMessage));
                    threadSend.Start(receiveBytes);
                    //string message = Encoding.Unicode.GetString(receiveBytes);
                    //List pointlist=destinationList.Rows;
                   
                    //启动文件解析落地线程
                    //Thread saveThread = new Thread(SaveMessage);
                    /veThread.Start(receiveBytes);

                    // 显示消息内容
                    //ShowMessageforView(lstbxMessageView, string.Format("{0}[{1}]", remoteIpEndPoint, message));
                }
                catch(Exception e)
                {
                    throw (e);
                    /;
                }
            }
        }


  //发送数据方法
private void SendMessage(object obj)
        {

            //IFormatter formatter = new BinaryFormatter();
            //MemoryStream ms = new MemoryStream();
            //formatter.Serialize(ms,obj);
            //byte[] message = ms.GetBuffer();
            try
            {
                var message = (byte[])obj;
                for (int i = 0; i < destinationList.RowCount; i++)
                {
                    if (destinationList.Rows[i] != null)
                    {
                        IPAddress remoteIp = IPAddress.Parse(destinationList[0, i].Value.ToString());
                        int remotePort = int.Parse(destinationList[1, i].Value.ToString());
                        IPEndPoint remotePoint = new IPEndPoint(remoteIp, remotePort);
                        //sdsock.SendTo(message, message.Length, SocketFlags.None, remotePoint);
                        sdsock.SendTo(message, remotePoint);
                       
                    }
                }
            }
            catch(Exception e)
            { Console.Out.Write(e); }
2013年4月09日 21:01
目前还没有答案

相关推荐

    利用MATLAB实时接收UDP数据包

    利用MATLAB建立ARP连接,轮询等待,实时接收、解析UDP数据包

    UDP数据包接收(客户端)

    在C++编程中,处理UDP数据包接收和发送是网络编程的基础。以下是对"UDP数据包接收(客户端)"这一主题的详细解释: 1. UDP协议基础: UDP是一种不可靠的协议,它不建立连接,不保证数据包的顺序,也不进行错误检测...

    receive-UDP-data.zip_UDP发送_UDP数据接收_工控_数据包

    由于UDP的不可靠性,接收端通常需要额外的机制来确保数据的完整性和顺序,比如使用序列号对数据包进行排序,或者实现重传机制来处理丢失的数据包。 在压缩包中的"接收国电智深UDP数据包"可能是实现这一功能的具体...

    qt udp client 带有响应发送端响应

    然而,尽管UDP不保证数据包的顺序和完整性,但在实际应用中,为了确保通信的有效性,我们往往需要实现一种机制来确认接收端已经接收到发送端的数据,这就是所谓的“响应”机制。本文将深入讲解如何使用Qt框架来构建...

    matlab使用UDP协议发送和接收报文程序源码.zip

    【达摩老生出品,必属精品,亲测校正,质量保证...源码说明: 基于matlab的使用UDP协议发送和接收报文程序源码,有发送和接收端两套程序,包含完整代码和注释,非常适合借鉴学习 适合人群:新手及有一定经验的开发人员

    UDP方式发送视频文件或数据包

    由于UDP不保证数据包的顺序和完整性,因此在接收端需要自行处理数据包的重组和错误检测。 描述中提到的“一个简单而完整的以UDP方式发送文件或单独数据包的程序”可能是一个用C++语言编写的示例程序,它利用了...

    python 通过UDP发送与接收.rar

    - **创建套接字**:同样,接收端也需要创建一个UDP套接字。 - **绑定地址**:接收端也要绑定一个本地IP和端口,这样数据才能被正确接收。 - **接收数据**:使用`recvfrom()`函数接收数据。这个函数会阻塞,直到有...

    QT中UDP的发送端及接收端代码

    创建UDP接收端: 接收端同样使用`QUdpSocket`,并需要绑定到一个端口以接收数据。这里我们监听所有接口(不仅仅是本地主机)上的特定端口: ```cpp QUdpSocket udpReceiver; if (!udpReceiver.bind(QHostAddress::...

    UDP打包数据包发送服务

    本篇文章将深入探讨如何在Java环境中实现UDP打包数据包的发送服务。 首先,我们来看`Sender.java`文件。这个文件通常包含了发送数据包的逻辑。在Java中,我们使用`java.net.DatagramSocket`类来创建UDP套接字,它...

    c#中关于udp实现可靠地传输(数据包的分组发送)

    1. **序列号与确认机制**:为每个发送的数据包分配一个唯一的序列号,这样接收端可以根据序列号对数据包进行排序,并确认收到的数据包。如果接收到的数据包序列号不连续,说明有数据包丢失,需要重新发送。 2. **重...

    Labview局域网UDP通讯-发送接收数组字符串.zip

    在实际应用中,使用这些Labview子程序时,你需要配置发送和接收端的IP地址和端口,确保它们相互匹配。同时,由于UDP的无连接特性,发送端无需等待确认,可能导致数据丢失,所以在设计系统时要考虑错误检测和重传机制...

    UDP例子 接收端_UDP_udp接收例子_

    这个"UDP例子 接收端_UDP_udp接收例子_"可能是用QT编写的一个UDP接收端程序,用于接收发送端发送的数据。 首先,我们需要创建一个UDP套接字(QDatagramSocket)来监听和接收数据。在QT中,可以通过以下代码创建一个...

    Tcp和Udp的数据包发送程序

    在TCP中,数据会被分割成多个段,并在接收端重新组装,如果数据包丢失,TCP会进行重传。这个程序将展示如何创建一个TCP客户端和服务器,以及如何通过它们发送和接收数据。 UDP则是一种无连接的、不可靠的传输协议。...

    UDP.rar_UDP_UDP侦听_UDP发送_UDP接收_java接收端口

    与TCP相比,UDP不提供流控制、拥塞控制和确认机制,而是以尽可能快的速度发送数据包,对数据的顺序和丢失没有保证。这种特性使得UDP适用于实时应用,如在线视频、语音通话或在线游戏,这些场景对低延迟有较高要求,...

    Qt5--UDP图片的发送与接收

    接收端的实现步骤如下: 1. 创建并初始化`QUdpSocket`,同样绑定到本地端口,这样可以接收来自任何源的数据报。 2. 设置信号槽连接,监听`readyRead()`信号。当有新数据到达时,该信号会被触发。 3. 在槽函数中,...

    UDP的发送接收例子 及SNMP trap

    接下来是`UDPReceive.java`,这个文件展示了如何建立一个UDP接收端。与发送端类似,我们同样使用`DatagramSocket`创建一个套接字,但我们需要设置一个监听函数来捕获到来的数据包。这通常通过创建一个无限循环来实现...

    VB利用UDP 发送数据包例子源码

    Dim remoteEP As IPEndPoint = Nothing ' 接收端的IP和端口信息 Dim receivedData As String = Nothing Dim bytesReceived As Integer = udpClient.Receive(receivedBytes, remoteEP) receivedData = Encoding....

    C#基于UDP协议的Socket通信整套源码(包括发送端和接收端)

    在实际应用中,发送端和接收端可能需要更复杂的逻辑,例如处理并发请求、错误检查或数据包重组。`UdpClient`类提供了丰富的API,如`BeginReceive`和`EndReceive`用于异步接收,以及`JoinMulticastGroup`用于加入多播...

    UDP.rar_UDP接收_udp包_udp数据包

    UDP不保证数据的顺序、完整性和可靠性,它仅仅提供一个将数据从源端发送到目的端的机制,没有流量控制、拥塞控制和重传机制。这意味着,如果数据在网络中丢失或重复,UDP协议本身不会尝试恢复,这些责任需要由应用...

    RTP发送(TCP UDP两种方式)

    由于TCP的顺序保证,接收端可以按照正确的顺序重组RTP数据包,但这也可能导致接收端必须等待丢失的包重传,从而增加延迟。此外,TCP的拥塞控制可能导致数据流的突然减慢或暂停,这对实时应用来说可能是不利的。 **...

Global site tag (gtag.js) - Google Analytics