c/s结构使用UDP协议,在客户端使用CONNECT(),如果我的服务器有
两张网卡,设置三个IP,其中一个是对内局域网使用,另外两个有不同的用处,
现在,客户端使用UDP协议的connect()方式,发送数据给服务器,服务器可以收到,
但是,当服务器用SENDTO()方式发送数据给客户端的时候,没有错误(发送的字符数
和给定的一样),但是,客户端无法接收到任何信息,同样的程序,我用拨号上网的方式,
发送接受没有问题,但是测试的时候是一张网卡,两个IP)
问题出自那里?会不会是路由器的问题,
因为服务器是托管到其他地方,所以没办法实地测试,但我了解到路由器没有配置ICMP。
会不会是出自这里?

解决方案 »

  1.   

    http://www.csdn.net/expert/topic/1046/1046526.xml?temp=.472912
    http://www.csdn.net/expert/topic/1046/1046492.xml?temp=6.916445E-02
    关注UP 有分!
      

  2.   

    如果是两个IP地址,那么你必须在两个IP地址上都启用绑定与侦听。
      

  3.   

    客户端也要有绑定然后 recvfrom也要有
      

  4.   

    wuxuan(真心英雄) :
    我在客户端已经使用了connect和sendto
    发送 到指定的一个IP(两个IP中的一个)。
    没有必要在两个IP上同时绑定了吧,关键是不是在路由上?
      

  5.   

    你说的收不到包的情况下,client是在局域网测试的吧?如果是的话,那是你的server端程序问题。
    涉及到NAT的问题,server应该使用最近一次收到的client包的ip:port与client通讯。这个port可能不是固定的,跟具体的网关/路由有关系
      

  6.   

    既然是绑定该机器上所有可能的ip地址,为何不用INADDR_ANY  这个代表任意地址的地址,而一个个去绑定?
      

  7.   

    T0:Kevin_qing()
    客户端是在局域网,但是我用sendto和服务器通讯,
    然后,服务器得到recvfrom得到数据和源IP,然后用SENDTO()发送,
    这个过程应该没有问题吧。
    拨号上网的形式应该比固定IP的形式难,
    但是这里拨号能够通讯,但是在让被人托管的服务器(固定IP)的
    时候就不能了。
      

  8.   

    按照你说的情况,应该是路由问题。
    最简单的办法,是在服务器上PING客户端,一试即知。但现在按你说的,没有办法到实地。
    目前的办法就只有将客户端的机器IP分别换成与服务器的IP同在一个网段中进行监听,再看情况确定故障。另外如果你的客户端是Windows机器请注意你的广播地址是不是255.255.255.255,Windows只认这个。
      

  9.   

    总结:
    我最近的一系列问题都是有关UDP协议的,开始的关键之处在于对网关和路由器方面的不了解。所以有些问题明明知道出在那里,但是不能够肯定而且又无法实地测试(托管的机房不允许随便进去测试),所以才求救于CSDN各位大虾,问题总算解决。由WAN向LAN发送数据的时候,经过路由器(或者网关之类的东西,我不知道为什么要这样,对于实际工作的障碍远远大于所谓的安全保障,到最后还不是被我绕过去了!呵呵!!!)的时候,会将我的数据报丢弃。多亏各位的提醒