A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 王春蕾 中级黑马   /  2014-4-26 10:28  /  1096 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我定义了接收端和发送端两个类,代码如下:
接收端:
  1. package net.udp;

  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.SocketException;

  6. public class UDPReceiver {

  7.         public static void main(String[] args) throws IOException {
  8.                 // TODO Auto-generated method stub
  9.                 /*
  10.                  * 建立UDP的接收端
  11.                  * 思路:
  12.                  * 1、必须有UDP的端点,socket
  13.                  * 2、接收数据,并解析数据
  14.                  * 3、将数据打印出来,并结束接收动作
  15.                  */
  16.                 System.out.println("UDP接收端开启。。。。");
  17.                 //1、创建一个UDP的端点。注意:接收端一定要明确具体的端口,否则收不到数据
  18.                 DatagramSocket ds=new DatagramSocket();
  19.                 //2、接收数据,一般使用socket服务的动作完成,将数据存储到数据包对象中
  20.                 byte[] buf=new byte[1024];
  21.                 DatagramPacket dp=new DatagramPacket(buf,buf.length);
  22.                 ds.receive(dp);
  23.                 //3、通过数据包对象的方法对数据进行解析
  24.                 String ip=dp.getAddress().getHostAddress();
  25.                 int port=dp.getPort();
  26.                 String text=new String(dp.getData(),0,dp.getLength());
  27.                 System.out.println("ip:"+ip+";port:"+port+";"+text);
  28.                 ds.close();
  29.                 System.out.println("UDP接收端关闭");
  30.         }
  31. }
复制代码

发送端:
  1. package net.udp;

  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. import java.net.SocketException;
  7. import java.net.UnknownHostException;

  8. public class UDPSender {

  9.         public static void main(String[] args) throws SocketException, IOException {
  10.                 // TODO Auto-generated method stub
  11.                 /*
  12.                  * 需求:创建一个UDP发送端 思路: 1、先创建UDP端点,也就是UDP的socket 2、将数据封装成数据包
  13.                  * 3、通过UDP的端点将数据包发送出去
  14.                  */
  15.                 System.out.println("UDP发送开始》》》》");
  16.                 // 1、创建socket
  17.                 DatagramSocket ds = new DatagramSocket(9527);
  18.                 // 2、将数据封装成数据包
  19.                 String str = "UDP发送数据演示";
  20.                 byte[] buf = str.getBytes();
  21.                 // 2.1 创建数据包对象
  22.                 DatagramPacket dp = new DatagramPacket(buf, buf.length,
  23.                                 InetAddress.getByName("localhost"), 10000);
  24.                 //3、使用UDP的socket服务将数据包发送出去
  25.                 ds.send(dp);
  26.                 //4、关闭资源:
  27.                 ds.close();
  28.                 System.out.println("《《《UDP发送结束");
  29.         }
  30. }
复制代码

接收端的DatagramSocket的9527端口是什么意思啊?不是已经定义了10000端口吗?为什么写9527也可以
接收到?这两个端口有什么区别呢?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

3 个回复

倒序浏览
DatagramSocket是构造数据报套接字并将其绑定到本地主机上任何可用的端口。 DatagramPacket是 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口。
回复 使用道具 举报
查阅API文档这两个方法就知道了。
我的理解就是 它们不是一个计算机上的端口。(前提是发送端和接收端不在一个计算机上)
回复 使用道具 举报
接收端的DatagramSocket的9527端口是什么意思啊?不是已经定义了10000端口吗?为什么写9527也可以接收到?这两个端口有什么区别呢?
第一:接收端的DatagramSocket的9527端口???什么意思,没明白。         
  • //1、创建一个UDP的端点。注意:接收端一定要明确具体的端口,否则收不到数据
  • DatagramSocket ds=new DatagramSocket();
这是你的代码,在DatagramSocket()里你都没有加上端口嘛。也就是说你没有指定用哪个端口来接收。看你还写了注意,说明你是知道这一点的。可能是失误。

第二:不是已经定义了10000端口吗?为什么写9527也可以接收到?   不会吧,我用自己的代码试了,如果发送端跟接收端所指定的端口号不一样的话,在接收端不可能接收到数据啊。我指的是这两处的端口:DatagramSocket ds = new DatagramSocket(10000);
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("localhost"), 10000);



第三:10000端口跟9527端口没什么区别,只不过是计算机里面的两个不同的端口,仅此而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马