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

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端口是否开通

    评论

报告相同问题?

悬赏问题

  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形