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();
        }
    }
0

2个回答

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

0
wlovexr1314
wlovexr1314 防火墙关闭了,异步发送的数据,在服务器能抓包到外网发送过来的数据,但就是服务器接收不到
接近 2 年之前 回复

防火墙关闭了,异步发送的数据,在服务器能抓包到外网发送过来的数据,但就是服务器接收不到

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# udp NAT打洞客户端1/2,可以实现不能局域网的通信,亲测
C# udp NAT打洞客户端,可以实现不能局域网的通信,亲测,测试请需要设置一个IP地址,这个IP地址为外网的IP地址,如果没有外网的IP地址,请通过路由器设置DMZ主机地址,也可以实现外网的功能,UDP NAT的原理可以在我的BLOG内找到
C# 委托方式实现的UDP服务器,可在多个Form接收UDP客户端发送过来的数据
C# 委托方式(类似事件响应,添加了MessageHandler的都可以接收到数据)实现的UDP服务器,可在多个Form接收UDP客户端发送过来的数据,在需要多个地方用到客接收数据的时候非常方便。完整的C#代码,VS2008工程。 TCP也可以参考类似实现。
C#使用UDP实现服务器与客户端通信
TCP 必须建立在连接才可以进行通信, UDP不需要建立通信 但两者都需要监听来接收消息 服务端 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System....
TCP UDP多机通信无法接收到数据的问题
TCP UDP调试注意事项 一般如果是使用localhost和127.0.0.1这种做server端IP的情况,服务器与客户一般是在一个主机上进行了,这个时候做调试一般不会出现什么问题。但是不同的机器做主机与服务器的时候就不一样了。比方说Android与电脑,电脑与电脑通信会出现各种奇怪的问题。出现这种问题一般可以从以下几种途径找问题: (1)电脑上是不是开了防火墙,如果开了就关掉 (2)电
UDP客户端数据收发
良心亲测可用代码,UDP客户端代码收发一体,可自行更改为服务器。
C# 中UDP通信时 发送数据并需要事先Bind IP地址
C#中进行UDP通信时,在发送数据的时候,如果不事先Bind一个IP地址,就会随机分配一个地址进行发送数据。发送端class Program { static Socket client; static void Main(string[] args) { client = new Socket(AddressFamil
UDP客户端实现在不同端口上发送和接收数据
普通udp通信,客户端在发送完数据后,只需要在相同socket上,recvfrom即可 服务端给的回应,可以是同一端口,也可以是不同端口,客户端在接收时,需要指点一个本地端口进行接收,此端口也可以用bind和创建的socket绑定。 但是bind必须是在通过这个socket发送数据前绑定,在发送数据后再bind会失败。 下面给出代码: #define SEND_PORT 8000
c#UDP异步发送接收
基于UDP的异步发送接收的小例子,可供大家学习参考,已调试通过
UDP/TCP客户端发送与接受数据
UDP/TCP客户端发送与接受数据 udp 步骤 1.创建套接字 2.发送和接收 3.关闭套接字 import socket udp类似写信 socket.AF_INET internet通信 socket.AF_UNIX 本机通信 socket.SOCK_DGRAM 流式套接字 socket.SOCK_STREAM 数据报套接字 (创建套接字) u...
Unity 与C#服务器 实现Socket的UDP通信(多客户端)
前言 上一篇简单的介绍了下Unity客户端和服务器的Socket通信,但是还不能实现多个客户端与服务器的通信,所以今天在这边把前面的工程完善一下(使用的是上篇讲到的UdpClient类来实现),实现多个客户端与服务器的udp通信。效果图如下,两个客户端可以向服务器发送消息,然后服务器每隔3秒给“连接上”的客户端发送收到的消息。 内容 思路上一篇已经讲到过了,我们定义两个特殊的字段,来告知...
python--UDP--客户端向服务器端发送消息
#消息发送端--客户端 import socket #创建一个socket,用函数socket(); client_send = socket.socket(type=socket.SOCK_DGRAM) # 设置对方的IP地址和端口等属性; ip_port = ("10.11.53.74",10086) #发送数据,用函数sendto() msg = input("请输入消息:") clie...
UDP数据读写以及服务器客户端的通信
#include #include ssize_t recvfrom(int sockfd,void* buf,size_t len,int flags,struct sockaddr* src_addr,socklen_t* addrlen); (recv(int sockfd,void* buf,size_t len,int flags)) ssize_t
C# UDP 接收客户端指令并发送数据
while (true) { Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //接受端口,表示从61556号端口接收 IPEndPoi
UDP java实现局域网发和收
importjava.io.IOException; importjava.net.DatagramPacket; importjava.net.InetAddress; importjava.net.MulticastSocket;     publicclassMulticastSenderFirst{         static String ipAddr = "224
C#实现简单UDP通信客户端和服务端小程序
本人初学C#语言,对于通信部分掌握欠缺为此写一个简单的UDP通信小程序,分享给大家,并附上源码!适合初学者,当然存在的小问题还望谅解! 小项目简单介绍 : 一、开发环境和开发语言 Microsoft Visual Studio 2010、C# 二、程序所用组件介绍以及采用协议 包含命名空间: using System.Net; using System.Net.Sockets; 程序包含客户和服务程序 项目文件解压后大小大概270kb左右
UDP通信发送数据的问题
UDP通信中发送结构体向量,接收向量并解析内容
无公网IP,VB应用从外网访问内网服务器
 应用需求之前做的板子加密工具,需要客户在工厂将所有板子先扫描一遍,然后将扫描得到的结果文件通过邮件发送给开发人员。开发人员根据收到的数据文件,生成一个加密文件,并发回给工厂。工厂收到加密数据后,需要重新扫描所有板子,将加密数据写入对应的板子。这样做的结果是需要工厂对所有板子操作两遍,中间还需要等待接收邮件,比较麻烦和费时。新的设想是,工厂在扫描每片板子时,即时通过互联网将数据发送到开发人员架...
UDP实现简单的聊天室功能
程序介绍: 实现简单的聊天室的功能,代码呢我只写了一方面的(即客户端发往服务端的)其实只写一端的代码就足够了 那么怎么才能实现聊天实的功能呢,就是要再将代码复制一份,两个人在两台PC上运行代码即可。 那么运行的时候需要修改什么呢,就是要需要修改一下IP地址和端口号。 Ip地址和端口号遵循这个员原则:客户端(发送端)设置的端口号要和服务端(接收端)的端口号相对应。 这样才能保证通信的畅通。...
U3D Udp的发送、接受和处理
SingletonUDP_Send.cs类使用单例模式发送,获取UPD消息.cs类负责消息接受,UDP消息处理.cs类负责消息的处理,因为我经常使用UDP功能,所以我整合了一下,非常方便使用,只要把“获取UPD消息.cs”和“UDP消息处理.cs”拖到一个对象里即可,发送直接单例调用
C#编写的UDP收发数据 单独的接收数据程序可以用 但是写的接收和发送的不好使
如题 求大神指教 如何用C#发送结构体
Unity C#作为客户端与C++服务器 传递结构体进行Socket通讯
最近接触到C#和C++进行SOCKET通讯的问题。 讲述一下我的情况:  和我合作的是一个只懂C++的程序员  , 而我是一个经常使用C# 对C++知之甚少的人,  没办法  半路出家。 C++的服务器是他写的     C#的客户端是我写的。  说实话,这个问题困扰了我长达2周之久。  期间我有一种我是中国人而那个人却是个美国人的感觉。   下面贴一下思路和代码 C++这边我不是特别会...
udp连接单向传输 (只能是服务器向已连接的udp客户端单项发送数据)
server.c 对于UDP套接字连接了客户端:     1.只能是客户端向服务端发数据     2.服务端不能像服务器发送数据(包括所有发送函数) #include <unistd.h> #include <stdio.h> #include <errno.h> #include <sys/types.h> /* See N...
unity-UDP服务器数据传输
这里有一个需求就是,在服务端发送数据到客户端,客户端来接受数据,客户端是在unity中,比如客户端可以是人,小车等,我可以通过服务端的数据来控制人或者车的行为 。 首先,我们需要建立一个udp服务器,udp是面向无连接的不可靠传输协议,传输速度快且可传输数据量很大。由于要与unity数据传输,我们使用C#来建立服务端和客户端。 我们首先需要设置IP和端口号,然后创建两个线程,一个是发送...
在unity中用UDP实现发送消息机制
首先,用Unity新建两个项目,然后一个写Server,另一个写Client。`using UnityEngine; using System.Collections; //引入库 using System.Net; using System.Net.Sockets; using System.Text; using System.Threading;public class UdpSe
Socket实现简单的指定客户端发送信息(C#)
Socket实现简单的指定客户端发送信息(效果如下图)   不多说了,直接上代码: server端: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Net.Sockets...
UDP协议接收数据与发送数据
UDP: 把数据打包 数据有限制 不建立连接 速度快 不可靠 一些需要用到的方法: InetAddress 类: tring getHostAddress() 返回 IP 地址字符串(以文本表现形式)。 String getHostName() 获取此 IP 地址的主机名。 static InetAdd...
udp的发送数据和接收数据
1.发送数据 String ip = (String) SPUtils.get(IP_INFO, defaultIp, this); //获取本地ip地址 InetAddress receiverHost = InetAddress.getByName(ip); byte[] titleByte =
乐鑫Esp32学习之旅⑧ esp32上实现本地 UDP 客户端和服务端角色,在局域网内实现通讯。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。 2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。 3、 认识基本esp32的GPIO接口,...
C#客户端发送http请求与服务器通信
C#客户端发送Http请求与服务端通信 环境介绍 1. vs2013 2. winform 通过
UDP传输:(四)通过多线程改进,在一个窗口中同时接收又发送
UDP传输:(四)通过多线程改进,在一个窗口中同时接收又发送
java用udp发送数据demo
java 使用udp发送数据包时,使用byte数组 public class UdpClientUtil { private static final Logger logger = LoggerFactory.getLogger(UdpClientUtil.class); public static void sendMessage(Integer operation,Str...
CsharpSocketTCPIPC# 使用Socket发送和接收TCP数据
A控制B,那A就是上位机,A发送协议内规定的一串数据,B接收到确认数据没错再返回其对应的数据。相对应的B就是下位机,plc常见的上位机有pc,HMI,其他plc,与pc通讯,
网口调试软件,通过pc的网口以TCP/UDP协议和下位机通讯。
网口调试软件,通过pc的网口以TCP/UDP协议和下位机通讯。是做嵌入式网口通讯程序开发的必备工具。
基于UDP实现简单的客户端服务端的消息传递
前面的TCP是有可靠的,有序的。现在看看UDP,UDP是不可靠的,无序的。 现在看看实现: 这里我也用两个类模拟了客户端与服务端, 现在直接看下代码: UDPServer.java: package com.socket.udp; import java.io.IOException; import java.net.DatagramPacket; import java.
.net c# udp通信,采用多线程处理,消息接收,发送,处理
udp,多线程,消息队列,线程池,统一的消息处理
如何实现与内网服务器进行通讯
实施步骤如下: 1、到该链接下https://app.topsec.com.cn/ 下载天融信VPN客户端; 2、双击安装好SV独立客户端,设置连接地址、账号和密码; 3. 当出现”隧道连接成功”时 则表明连接内网成功; 4. 给电脑安装上360随身WIFI的驱动,插上360随身WIFI的USB,此时360随身WIFI就会广播内网; 5. 此时用设备连接广播的WIFI,就能和内网服务器进...
【Python】udp网络程序-发送、接受数据
udp网络程序-发送、接收数据 1. udp网络程序-发送数据 创建一个基于udp的网络程序流程很简单,具体步骤如下: 创建客户端套接字发送/接收数据关闭套接字 与发短信类似。 代码如下: #coding=utf-8 from socket import * # 1. 创建udp套接字 udp_socket = socket(AF_INET, SOCK_DGRAM) #
Node.js UDP服务器无法收到客户端消息
Node.js UDP服务器无法收到客户端消息          在《Node.js开发实战详解》这本书的第四章里,在架设Node.js服务器后,运行客户端程序,服务器无法收到消息。server.jsvar dgram = require('dgram'); var server = dgram.createSocket('udp4'); server.on('listening', funct
Socket使用UDP实现客户端发信息,服务端接收
//客户端 package test; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownH...
Linux系统udp模式下服务器与客户端通信(可同时多个客户端一起通讯)
//ser.c #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<sys/socket.h> #include<netinet/in.h> int main() { int sockSer = so...