因为socket是通过ip地址和通信端口来寻找计算机和计算机上socket句柄的,局域网内的机器的在访问internet时,计算机的ip不是我们看到的192.168.x.x而是网关的ip,端口也被转换了。udp通信时不用建立连接,所以有办法得到被网关转换后的通信端口,而tcp做服务器就没办法得到它的通信端口。用udp也不是直接可以通信的,如果双方都没有真实的ip,必须通过一个有真实ip的中间服务器来获得双方的ip和端口,让后才能用udp进行通信。就象qq开始必须登陆服务器一样。如果两台机器在一个局域网就不存在任何问题,如果不在一个局域网要用tcp的话,作为服务器一方的网关必须有真实的internet ip 地址,在网关进行nat映射设置,把端口指定到服务器所在的机器上(具体我也没有试过,不清楚)。
1,局域网内的机器作为客户端主动访问internet上有真实ip和端口的服务器。
2,用udp数据报的方式通信。
能解释为什么用UDP传送可以直接通信那?
如果这个程序用到了两种协议(tcp,udp)那又会可以怎样那?
多谢!!!
因为socket是通过ip地址和通信端口来寻找计算机和计算机上socket句柄的,局域网内的机器的在访问internet时,计算机的ip不是我们看到的192.168.x.x而是网关的ip,端口也被转换了。udp通信时不用建立连接,所以有办法得到被网关转换后的通信端口,而tcp做服务器就没办法得到它的通信端口。用udp也不是直接可以通信的,如果双方都没有真实的ip,必须通过一个有真实ip的中间服务器来获得双方的ip和端口,让后才能用udp进行通信。就象qq开始必须登陆服务器一样。如果两台机器在一个局域网就不存在任何问题,如果不在一个局域网要用tcp的话,作为服务器一方的网关必须有真实的internet ip 地址,在网关进行nat映射设置,把端口指定到服务器所在的机器上(具体我也没有试过,不清楚)。