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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.itheima.day23;

  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 UdpDemo {

  9.         /**
  10.          * udp发送端
  11.          */
  12.         public static void main(String[] args) {
  13.                 try {
  14.                         DatagramSocket ds= new DatagramSocket(10000);
  15.                         byte [] buf= "ab cd ef j".getBytes();
  16.                         DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"),
  17.                                         10000);
  18.                         ds.send(dp);
  19.                         ds.close();
  20.                        
  21.                        
  22.                 } catch (SocketException e) {
  23.                         // TODO Auto-generated catch block
  24.                         e.printStackTrace();
  25.                 } catch (UnknownHostException e) {
  26.                         // TODO Auto-generated catch block
  27.                         e.printStackTrace();
  28.                 } catch (IOException e) {
  29.                         // TODO Auto-generated catch block
  30.                         e.printStackTrace();
  31.                 }

  32.         }

  33. }
复制代码
  1. package com.itheima.day23;

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

  6. public class UdpDemo {

  7.         /**
  8.          * 接受发过来的数据
  9.          */
  10.         public static void main(String[] args) {
  11.                 try {
  12.                         DatagramSocket ds=new DatagramSocket(10000);
  13.                         byte [] buf=new byte[1024];
  14.                         DatagramPacket dp=new DatagramPacket(buf,buf.length);
  15.                         ds.receive(dp);
  16.                         ds.close();
  17.                         String ip= dp.getAddress().getHostAddress();
  18.                         String data = new String(dp.getData(),0,dp.getLength());
  19.                         int port = dp.getPort();

  20.                         System.out.println(ip+"::"+data+"::"+port);
  21.                 } catch (SocketException e) {
  22.                         // TODO Auto-generated catch block
  23.                         e.printStackTrace();
  24.                 } catch (IOException e) {
  25.                         // TODO Auto-generated catch block
  26.                         e.printStackTrace();
  27.                 }
  28.                
  29.         }

  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

5 个回复

倒序浏览
接收端的  ds.close(); 这个代码 你写到下面去 呀 , 你那么快关了干嘛啊!在System.out.println() 之后  ds.close();
回复 使用道具 举报
  • package com.itheima.day23;
  • import java.io.IOException;
  • import java.net.DatagramPacket;
  • import java.net.DatagramSocket;
  • import java.net.InetAddress;
  • import java.net.SocketException;
  • import java.net.UnknownHostException;
  • public class UdpDemo {
  •         /**
  •          * udp发送端
  •          */
  •         public static void main(String[] args) {
  •                 try {
  •                         DatagramSocket ds= new DatagramSocket(10000);
  •                         byte [] buf= "ab cd ef j".getBytes();
  •                         DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"),
  •                                         10000);
  •                         ds.send(dp);
  •                         ds.close();
  •                 } catch (SocketException e) {
  •                         // TODO Auto-generated catch block
  •                         e.printStackTrace();
  •                 } catch (UnknownHostException e) {
  •                         // TODO Auto-generated catch block
  •                         e.printStackTrace();
  •                 } catch (IOException e) {
  •                         // TODO Auto-generated catch block
  •                         e.printStackTrace();
  •                 }
  •         }
  • }
服务器端:
  • package com.itheima.day23;
  • import java.io.IOException;
  • import java.net.DatagramPacket;
  • import java.net.DatagramSocket;
  • import java.net.SocketException;
  • public class UdpDemo {
  •         /**
  •          * 接受发过来的数据
  •          */
  •         public static void main(String[] args) {
  •                 try {
  •                         DatagramSocket ds=new DatagramSocket(10000);
  •                         byte [] buf=new byte[1024];
  •                         DatagramPacket dp=new DatagramPacket(buf,buf.length);
  •                         ds.receive(dp);
  •                         ds.close();
  •                         String ip= dp.getAddress().getHostAddress();
  •                         String data = new String(dp.getData(),0,dp.getLength());
  •                         int port = dp.getPort();
  •                         System.out.println(ip+"::"+data+"::"+port);
  •                 } catch (SocketException e) {
  •                         // TODO Auto-generated catch block
  •                         e.printStackTrace();
  •                 } catch (IOException e) {
  •                         // TODO Auto-generated catch block
  •                         e.printStackTrace();
  •                 }
  •         }
  • }
注意我标记的红色部分,两个类类名相同,又在同一个包下,不出错才怪(除非你设置编译路径)。建议客户端类名改成UdpSendDemo,服务器端改成UdpReceDemo。
还有DatagramSocket ds= new DatagramSocket(10000); 客户端发送数据不需要绑定端口的,建议你最好把UDP通信原理弄清楚。但是如果你一定要绑定也行,服务器端就不能再绑定端口号10000.所以服务器端口号改成10001,就行了。楼上的解释是错误的。 在 ds.close(); 之前,数据已经读到数据包里面了。所以,即使关掉也无所谓。



评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
hello_world! 发表于 2012-10-24 14:49
  • package com.itheima.day23;
  • import java.io.IOException;

  • 我两个类的路径是不一样的  一个在eclipse里面写的  一个在myeclipse里面写的啊
    回复 使用道具 举报
    哦,今天多学一招了
    回复 使用道具 举报
    张学东 发表于 2012-10-24 14:51
    我两个类的路径是不一样的  一个在eclipse里面写的  一个在myeclipse里面写的啊 ...

    那就是端口绑定出问题了,我把端口改了,程序就可以出结果了
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 加入黑马