在目前的一个方案中, N个终端(gprs上网)通过udp和服务器(托管到机房)连接,并不断的发送数据包.我们的工程师告诉我,服务器无法分辨接受到的数据包来自哪一个终端.必须在每一组数据包里面加上设备的ID.我对此表示疑问,UDP创建的socket和TCP创建的socket不一样吗?一个连接创建一个socket,N个终端就有N个socket?另外我提出用远程IP+端口号来解决, 但是工程师说数据经过网关后IP是一样的,所以这样也不行.确实是这样的吗?

解决方案 »

  1.   


    UDP是没有连接的
    服务端一般都是采用异步模式,然后用一个Socket就行了IP会相同
    端口可能是路由临时随机给的
      

  2.   

    如果确实是这样,那么UDP协议是怎么分包沾包的呢?
      

  3.   

    UDP不会沾包
    UDP只会丢包,还有可能会分包
      

  4.   

    你在自己的内网向外网发包,外网收到的包的ip和端口是你的外网ip和端口。所以应该在每个包中加上标识。确实是这样。
    udp不像tcp那样会建立连接且封装了丢包处理,他只是往对应ip端口发包,所以有丢包的现象。