C# UDP协议通信问题
请教下大家,小弟自己写了个CS架构的UDP通信例子~在内网段192.168.0.200,192.168.66.150,192.168.1.26不同网段间测试均没有问题~但是把服务器放置到外网地址之后,内网192.168.1.26发出去的数据包,外网180.169.48.130地址收不到数据包了……请问这个是怎么回事呢?是程序的问题还是网络架构的问题?
192.168.1.26是单位的内网IP,180.169.48.130是单位出口的外网IP~直接为一台机子指定了这个IP连到外网上做服务器,内网的数据从另外的外网口出去……求指导,下附相关代码……谢谢~
IPEndPoint addressIn = new IPEndPoint(IPAddress.Parse(IpArray[0]), int.Parse("1234"));//server
//窗体初始化的时候开始监听UDP端口
udpIn = new UdpClient(addressIn);
// 启动接收线程
Thread thread = new Thread(new ThreadStart(RecieveDataIn));
thread.Start();
MessageBox.Show("中转服务器对内监听已经开启!");
上面这些是服务器开启监听的
当收到数据的时候 :
void RecieveDataIn()
{
while (true)
{
// 如果没有使用多线程这里一定要判断是否收到数据,
// 否则在Receive的时候线程会被挂起(直到接收到UDP请求,程序才会继续执行),造成卡死的现象
// 但是我们这是又开了一个线程,所以不需要判断,所以CPU占用率不会至少50%。
// 这里的udp.Available是对应的udp端口所获取的数据的总大小,与TCP方式不同(TCP是当前请求发送数据的大小)
if (udpIn.Available > 0)
{
IPEndPoint ipEndPoint = null;
byte[] buffer = udpIn.Receive(ref ipEndPoint);
string text = Encoding.UTF8.GetString(buffer);
SetTextIn(text);//显示数据
}}}
上面是显示数据的
private void SendMessage(string text)
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(IpAdd.Text), int.Parse("1234"));//server ipadd.text 目的IP 1234端口
UdpClient udptmp = new UdpClient();
byte[] buffer = Encoding.UTF8.GetBytes(text);
//这里必须要将IP地址传过去,否则会报错(实例化的时候要IP地址反而会有麻烦)
udptmp.Send(buffer, buffer.Length, remoteEndPoint);
}
上面这个就是发送数据的
------解决方案--------------------互联网丢包很频繁的,一半一半算好的了
建议还是使用tcp
------解决方案--------------------