我使用java.net.DatagramPacket 和 DatagramSocket 编程不同的用户可能使用相同的IP,比如通过IP Masquerade,公司内通过局域网上网,是否也会出现共享IP的情况?在java编程时,只知IP和端口,会出现什么问题?

解决方案 »

  1.   

    这不属于程序员的问题
    Java会调用OS的接口,然后由系统进行处理
      

  2.   

    对于网络编程中如何定位私有地址,穿过局域网,要用NAT穿透技术来解决就可以了。
      

  3.   

    在局域网中或是在一个vlan中,如果两个用户使用相同的IP(私有地址),就会发上冲突,
    比如说,你们班有5个学生的学号是一样的,在老师叫到这个学好的同学时你说那一个学生该站起来,
    而处于不同局域网中的相同ip地址用户,在经过路由器或交换机转发的时候会相应的将你的ip地址转换为
    一个外部合法地址
      

  4.   

    答:楼主讲的IP Masquerade是Unix、Linux上在NAT出现之前就有的一种较老的技术。现在一般是采用NAT。NAT技术一共有三种:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。其中:静态NAT(Static NAT),对于你的方案(由IP区分用户)没有什么问题,能正常工作。动态地址NAT(Pooled NAT)主要用于远程用户动态拨号,当用户联接上之后,动态地址NAT就会分配给他一个合法IP地址,用户断开时,这个IP地址就会被释放而留待以后使用。对于你的方案(由IP区分用户),在用户在正常连接期间区分,没有什么问题,能正常工作。第三种网络地址端口转换NAPT(Port-Level NAT)是用得最多的一种,将中小型的网络隐藏在一个合法的IP地址后面,内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的端口号。 这个NAT对你的方案(仅采用IP区分用户就不行了),用户的IP都相同,唯一不同的是端口号。因此,我认为:在这种NAT技术下,你的方案中要用IP+端口号(其实就是靠端口号了)方式来区分用户了。以上仅供你参考
      

  5.   

    感谢jiangnaisong!我想让每个用户在同一UDP端口接收,使用任一UDP端口发送,UDP编程就是这样的好像没有什么办法
      

  6.   

    答:你这样设计的方案有问题啊。每一个用户都在内网,而且都用同一个端口收,那么:NAT做端口MAPPING就很麻烦了。
    建议你能否如下设计:用户(无论是不是内网),首先向你这个UDPServer发UDP包,然后你记下他的IP和Port(这个IP和Port能唯一标识该用户)。因为即使用户是在内网,在NAT后面,这个IP和Port是NAT的公开IP和公开Port,但NAT能将向发的UDP包转给内网用户。以上仅供你参考。
      

  7.   

    NAT技术一共有三种:静态NAT(Static NAT)、动态地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)
    NAPT还真没用过
      

  8.   

    学习,NAPT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。 在Internet中使用NAPT时,所有不同的TCP和UDP信息流看起来好像来源于同一个IP地址我想让每个用户在同一UDP端口接收,使用任一UDP端口发送,UDP编程就是这样的 ?
    这样在同一端口就可能会出现信道的拥塞,
      

  9.   


    那么用户到底使用哪个UDP端口向服务器发包?
      

  10.   

    ***************************************************************************思想决定行动,加入程序员在深圳QQ群,参加技术思想碰撞专业分类:
    程序员在深圳JAVA群4247660
    程序员在深圳c++群15195967
    程序员在深圳.NET群Ⅱ:12203296
    程序员在深圳TCP/IP协议栈开发:16956462
    程序员在深圳JS & AJAX群:12578377
    程序员在深圳英语学习群:23864353
    深序员在深圳VB:11055959
    程序员在深圳c++Ⅱ17409451
    程序员在深圳c++群15195967
    程序员在深圳嵌入式开发群37489763
    程序员在深圳移动开发群31501597
    程序员在深圳创业群33653422不限专业分类:
    高级群:17538442
    第三群:2650485
    第五群:29537639
    第四群:28702746
    第六群:10590618
    第七群:10543585
    第八群:12006492
    第九群:19063074
    第十群:2883885
    第十一群:25460595
    第十二群:9663807深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达二千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入式操作系统),还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪6K以下的别加入) c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660  
    —————————————————————————————————————————— 
    希望大家不要认为群能给你带来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。*****************************************************************************
      

  11.   

    程序员在深圳JAVA群4247660 
    程序员在深圳c++群15195967 
    程序员在深圳.NET群Ⅱ:12203296 
    程序员在深圳TCP/IP协议栈开发:16956462 
    程序员在深圳JS & AJAX群:12578377 
    程序员在深圳英语学习群:23864353 
    深序员在深圳VB:11055959 
    程序员在深圳c++Ⅱ17409451 
    程序员在深圳c++群15195967 
    程序员在深圳嵌入式开发群37489763 
    程序员在深圳移动开发群31501597 
    程序员在深圳创业群33653422 不限专业分类: 
    高级群:17538442 
    第三群:2650485 
    第五群:29537639 
    第四群:28702746 
    第六群:10590618 
    第七群:10543585 
    第八群:12006492 
    第九群:19063074 
    第十群:2883885 
    第十一群:25460595 
    第十二群:9663807 
      

  12.   

    外网IP相同。内网IP不相同。