黑马程序员技术交流社区

标题: Socket获取的端口和10000端口有什么区 他们都是端口 [打印本页]

作者: 赵亚威    时间: 2013-4-2 12:35
标题: Socket获取的端口和10000端口有什么区 他们都是端口
本帖最后由 赵亚威 于 2013-4-2 16:17 编辑

public class SocketDemo {

        /**
         * @param args
         */
        public static void main(String[] args) {
         
                DatagramSocket ds = null;
        try {
                        ds=new DatagramSocket();
                        
                        byte[] buf="wo shi yi ge shu zu".getBytes();
                        DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
             ds.send(dp);
                        
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }finally{
                        if(ds!=null)
                        ds.close();
                }
        }

}
class SocketRecev{
        public static void main(String[] args){
                DatagramSocket ds=null;
                try {
                        ds=new DatagramSocket(10000);
                        byte[] buf=new byte[1024];
                        DatagramPacket dp=new DatagramPacket(buf,buf.length);
                        ds.receive(dp);
                        String ip=dp.getAddress().getHostAddress();
                        String data=new String(dp.getData(),0,dp.getLength());
                        int port=dp.getPort();
                        System.out.println(ip+":"+data+":"+port);//port为什么不是10000
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }finally{
                        if(ds!=null)
                        ds.close();
                }
        }
        
}
运行后的结果:
127.0.0.1:wo shi yi ge shu zu:54397
作者: 黑马李超    时间: 2013-4-2 12:49
这个返回的port是客户端的端口  不是服务端的
作者: 我手心里的宝    时间: 2013-4-2 12:54
在这里你返回的是客户端的端口,客户端端口你不指定的时候,它是一个系统随机分配
而且每次分配的都不一样
你说指定,那是指定服务端的端口
作者: 齐静    时间: 2013-4-2 13:20
一个客户端,一个服务器端
作者: 熊永标    时间: 2013-4-2 14:55
10000这个端口号用于接收传过来的数据包,当DatagramSocket收到数据包后,填充DatagramPacket数据包,从这个数据包中获取的端口是远程主机发送数据的端口.所以获取的端口当然是不一样的.
作者: 随便    时间: 2013-4-2 15:19
本帖最后由 邓宫财 于 2013-4-2 15:21 编辑
  1. public class SocketDemo {
  2.         public static void main(String[] args) {
  3.                 DatagramSocket ds = null;
  4.                 try {
  5.                         //这里需要指定发送端的端口号,不然就是随机的。
  6.                         ds = new DatagramSocket(10583);

  7.                         byte[] buf = "wo shi yi ge shu zu".getBytes();
  8.                         DatagramPacket dp = new DatagramPacket(buf, buf.length,
  9.                                         InetAddress.getByName("127.0.0.1"), 10000);//这里的10000是指发送到接收端的端口号
  10.                         ds.send(dp);

  11.                 } catch (IOException e) {
  12.                         e.printStackTrace();
  13.                 } finally {
  14.                         if (ds != null)
  15.                                 ds.close();
  16.                 }
  17.         }

  18. }
复制代码
修改了你的发送端,发送端如果不指定端口的话,会随机分配一个。
这里我指定了10583,结果会打印出
127.0.0.1:wo shi yi ge shu zu:10583

DatagramPacket dp = new DatagramPacket(buf, buf.length,
                                        InetAddress.getByName("127.0.0.1"), 10000);//这里的10000是指发送到接收端的端口号
而不是你认为的服务端的端口号。




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