黑马程序员技术交流社区

标题: 关于端口 [打印本页]

作者: 王宝龙    时间: 2012-10-2 13:28
标题: 关于端口
本帖最后由 王宝龙 于 2012-10-2 17:30 编辑

UdpSend类中的DatagramSocket ds = new DatagramSocket(8888)指定了端口
在下面的DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.103"),10000)这个的10000也是在指定端口吗??
然后在UdpRece类中DatagramSocket ds = new DatagramSocket(10000);设置端口为10000,那上面如果设置了8888,这里还能接受吗?
问的可能有点不清楚  !!大家帮忙给看一下!!谢谢了!!
  1. import java.net.*;


  2. class UdpSend
  3. {
  4.         public static void main(String[] arge) throws Exception
  5.         
  6.         {
  7.                 <font color="red">DatagramSocket ds = new DatagramSocket(8888);//这里也指定了端口为8888</font>
  8.                
  9.                 byte[] buf = "udp 哥们来了".getBytes();
  10.                 <font color="red">DatagramPacket dp =
  11.                         new DatagramPacket(buf,buf.length,
  12.                                 InetAddress.getByName("192.168.0.103"),10000);//这里已指定了端口为10000
  13. </font>               
  14.                 ds.send(dp);
  15.                
  16.                 ds.close();
  17.         }
  18. }



  19. class UdpRece
  20. {
  21.         public static void main(String[] arge) throws Exception
  22.         {
  23.                 <font color="red">DatagramSocket ds = new DatagramSocket(10000);</font>
  24.                
  25.                 byte[] buf = new byte[1024];
  26.                 DatagramPacket dp = new DatagramPacket(buf,buf.length);
  27.                
  28.                 ds.receive(dp);
  29.                
  30.                 String ip = dp.getAddress().getHostAddress();
  31.                 String data = new String(dp.getData(),0,dp.getLength());
  32.                 int port = dp.getPort();
  33.                
  34.                 System.out.println(ip+","+data+","+port);
  35.                
  36.                 ds.close();
  37.         }
  38. }
复制代码

作者: 王中利    时间: 2012-10-2 13:40
一、常用端口及其分类

    电脑在Internet上相互通信需要使用TCP/IP协议,根据TCP/IP协议规定,电脑有256×256(65536)个端口,这些端口可分为TCP端口和UDP端口两种。如果按照端口号划分,它们又可以分为以下两大类:

    1.系统保留端口(从0到1023)

    这些端口不允许你使用,它们都有确切的定义,对应着因特网上常见的一些服务,每一个打开的此类端口,都代表一个系统服务,例如80端口就代表Web服务。21对应着FTP,25对应着SMTP、110对应着POP3等。

    2.动态端口(从1024到65535)

    当你需要与别人通信时,Windows会从1024起,在本机上分配一个动态端口,如果1024端口未关闭,再需要端口时就会分配1025端口供你使用,依此类推。

    但是有个别的系统服务会绑定在1024到49151的端口上,例如3389端口(远程终端服务)。从49152到65535这一段端口,通常没有捆绑系统服务,允许Windows动态分配给你使用。

作者: 张丽    时间: 2012-10-2 13:53
可以接受,因为DatagramSocket ds = new DatagramSocket(8888)这个是建立socket服务,必须要分配未使用的端口才能建立服务,这个是发送端的端口;而下面的DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.0.103"),10000),这个10000端口是接收端的端口号,将数据打包后,封装成对象后,指定了接收端的IP和端口,将数据发送到接收端的10000端口上了,只要接收端将数据封装成对象,再调用方法即可获取里面的数据和IP还有端口号了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2