我做一个车载导航的服务器程序,涉及到网络编程这里。车载机用GPRS连接网络,导航需要用TCP连接做传输控制,而大部分数据都要通过用UDP协议完成传输,因为这样节省流量。但是他们要同时传给一个端口,我是新手,不知道可以这个端口可以同时绑定TCPsocket和UDPsocket吗?或者有什么其他的方法,大家例子的话,请传个我,非常感谢!

解决方案 »

  1.   

       (摘自《Unix网络编程》卷一,即UNPv1)    SO_REUSEADDR可以用在以下四种情况下。     1、当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时,而你启 动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。     2、SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但 每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可 以测试这种情况。     3、SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个soc ket绑定的ip地址不同。这和2很相似,区别请看UNPv1。     4、SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的 多播,不用于TCP。 例子1:测试上面第一种情况。
        
        接受数据有时要接收TCP信息,有时庶接收UDP信息,按说要一个端口号绑定到两个socket才行啊,但是两个socket又怎么能同时绑定到同一个端口呢,这样难道不冲突?
    2、3情况倒是跟我这个相似,但是需要绑定不同IP,本机服务器IP不应该一样才是啊!
      

  2.   

    只是号码相同,实际在TCP和UDP上表示不同的端口
      

  3.   

    TCP的端口是张三家管的,UDP的端口是李四家管的,不影响
      

  4.   

    必须用两个port,一个走TCP消息,一个走UDP消息
      

  5.   

    TCP端口和UDP端口根本不是一回事情,你随时可以用同一个端口发数据,系统自动会处理,两者不冲突。
      

  6.   

    那么一个地址和IP和端口号 可以同时直接绑定两个socket喽?怎么设置SetSocketOption呢?
      

  7.   

    还有怎样用setsockopt设置SO_REUSEADD
      

  8.   

    TCP和UDP是两个不同的协议。互不影响和干涉。你只管用就行了。你可以人为他们之间毫无关系!
    SOCKET是通过(PROTOCOL/SRC IP/DST IP/SRC PORT/DST PORT)绑定的,看到了吧这里有个IP层的协议指示PROTOCOL很重要!如果协议不同,那么其他的都是浮云