wlovexr1314 2017-09-17 16:22 采纳率: 0%
浏览 2235

C# UDP通讯,外网客户端向内网服务器发送数据接受不到

内网发送接收消息没问题,外网路由器做了UDP映射,客户端发送数据,能在内网PC电脑上抓包出来,但是服务器接收不到这个消息
private void freeDNS_Server_Load(object sender, EventArgs e)
{
receiveClient = new UdpClient(port);
Thread myThread = new Thread(ReceiveData);
myThread.IsBackground = true;
myThread.Start();
}

    //在后台运行的接收线程   
    private void ReceiveData()
    {
        //在本机指定的端口接收  
        UdpState udpState = new UdpState();
        udpState.ipEndPoint = null;
        udpState.udpClient = receiveClient;
        //接收从远程主机发送过来的信息;  
        IAsyncResult ar = udpState.udpClient.BeginReceive(ReceiveUdpClientCallback, udpState);
        ar.AsyncWaitHandle.WaitOne();
        MessageBox.Show("线程结束");
    }


    //接收信息回调方法  
    void ReceiveUdpClientCallback(IAsyncResult ar)
    {
        try
        {
            UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).udpClient;
            IPEndPoint remote = (IPEndPoint)((UdpState)(ar.AsyncState)).ipEndPoint;
            Byte[] receiveBytes = u.EndReceive(ar, ref remote);
            string str = Encoding.UTF8.GetString(receiveBytes, 0, receiveBytes.Length);
            AddItem(listBox_freeDNS_Server, string.Format("来自{0}:{1}", remote, str));
            ReceiveData();//继续接受数据  
        }
        catch (Exception ex)
        {
            AddItem(listBox_freeDNS_Server, string.Format("错误信息{0}", ex.ToString()));
        }
    }

    delegate void AddListBoxItemCallback(string text);
    private void AddListBoxItem(string text)
    {
        //如果listBoxReceive被不同的线程访问则通过委托处理;  
        if (listBox_freeDNS_Server.InvokeRequired)
        {
            this.Invoke(listBoxCallback, text);
        }
        else
        {
            listBox_freeDNS_Server.Items.Add(text);
            listBox_freeDNS_Server.SelectedIndex = listBox_freeDNS_Server.Items.Count - 1;
            listBox_freeDNS_Server.ClearSelected();
        }
    }
  • 写回答

2条回答 默认 最新

  • 风平-浪静 2017-09-18 01:43
    关注

    一:检查防火墙是否关闭
    二:外网客户端机器的UDP端口是否开通

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!