首页 新闻 会员 周边 捐助

UDP通讯时,服务端先开启监听,客户端向服务端发消息,服务端能收到,服务端向客户端发消息,客户端收不到

0
悬赏园豆:50 [待解决问题]

服务端:

IPEndPoint ip= new IPEndPoint(IPAddress.Any,0);

UdpClient uc = new UdpClient(888);  

while(true){

byte[] msgBuffer=  uc.Receive(ref ip);

......监听到各种类型的消息

uc.Send(消息,消息长度,ip);//这里发送出去了 (外网)客户端却没监听到!!!!!!!

}

 

客户端:

UdpClient  _client = new UdpClient();

IPEndPoint ip= new IPEndPoint(IPAddress.Any,0);

IPEndPoint _hostPoint = new IPEndPoint(IPAddress.Parse("*.*.*.*"), 888)//主机服务器ip及端口号(外网)

_client .Send(消息,消息长度,_hostPoint );//给服务·发送消息

while(true){

byte[] msgBuffer=  _client .Receive(ref ip);

......监听到各种类型的消息

}

客户给服务法消息 服务你能够监听到!

但是服务端向客户发送消息时却始终无法监听到!

不知道哪里出了问题?????防火墙都关了

UDP
WP921108的主页 WP921108 | 初学一级 | 园豆:108
提问于:2014-11-27 17:03
< >
分享
所有回答(1)
0

服务器和客户端不在同一个路由下边..

你给客户端的路由器设置一下DMZ主机,IP设置成你这台客户端的IP就行了.

hexllo | 园豆:318 (菜鸟二级) | 2014-11-27 17:13

可以用代码实现吗?项目是要给客户用的,不会要让客户自己手动设置吧?这样肯定不行呀

支持(0) 反对(0) WP921108 | 园豆:108 (初学一级) | 2014-11-27 17:26

@WP921108: 可以用代码实现, 你去研究一下  "穿透" 这个技术.

 

你们将产品给客户使用时,写一个产品说明书,或者给客户培训一下不就行了?要不你们直接帮客户部署算了.

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-11-27 17:34

我猜测不是客户端的问题,应该是在服务端的路由器上设置DMZ主机,因为服务能收却不能发送(可以发送到内网的其他客户端,只是不能发送到外网的客户端)。等会回家配置一下 试试看。谢谢提醒!

支持(0) 反对(0) WP921108 | 园豆:108 (初学一级) | 2014-11-27 17:35

@hexllo: 我就是在用UDP打洞 刚开始研究 呵呵

支持(0) 反对(0) WP921108 | 园豆:108 (初学一级) | 2014-11-27 17:37

@WP921108: 不错哦小子.我都没有打过洞呢..哈哈

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-11-27 18:33

@hexllo: 我擦 还是不行

byte[] sumsg = ObjectSerializer.Serialize(su);//序列化消息
int tl = sumsg.Length;
int rl= uc.Send(sumsg, sumsg.Length,ip);

我通过比较tl 和rl的值 发现他们是相等的 也就是说成功地发送了消息,但是为何客户端一直监听不到呀???

支持(0) 反对(0) WP921108 | 园豆:108 (初学一级) | 2014-11-28 09:20

@WP921108: 要不你先将服务器端和客户端放在一个路由内,先测试一下是程序的问题,还是网络的问题..

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-11-28 09:31

@hexllo: 在一个路由内完全没问题 。就是当客户端和服务器不在一个路由内时,客户端始终监听不到消息,好纳闷啊

支持(0) 反对(0) WP921108 | 园豆:108 (初学一级) | 2014-11-28 09:34

@WP921108: 我们当时的场景是一台网外的服务器,对应多个地区的客户端,但是呢..每个地区只有一台客户端,所以就直接将客户端的IP作为DMZ主机了..

 

所以就没有用到穿透技术,你这个问题已经超出我的解决范围了,呵呵,你在网上找找QQ公司是怎么做的穿透,再看看你的穿透部分的逻辑是不是有问题?小的无能为力,只能给你提供一个思路了.

支持(1) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-11-28 09:39

@hexllo: 谢谢了 好的 我在研究研究 ,之前本来是使用WCF双工通讯实现,后来发现wcf双工一般在内网使用,如果在外网,则要在客户端路由做端口映射所以改为UDP了.......哎╮(╯▽╰)╭

支持(0) 反对(0) WP921108 | 园豆:108 (初学一级) | 2014-11-28 09:45

@WP921108: 加油,解决了别忘记告诉我一下哦,嘿嘿~~

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-11-28 09:46

@WP921108: 我也想知道是怎么解决的.

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-11-28 09:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册