黑马程序员技术交流社区

标题: 大家帮忙看看这个数据怎么接受不到啊?、、 [打印本页]

作者: 张学东    时间: 2012-10-24 14:09
标题: 大家帮忙看看这个数据怎么接受不到啊?、、
  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. }
复制代码

作者: 范贞亮    时间: 2012-10-24 14:26
接收端的  ds.close(); 这个代码 你写到下面去 呀 , 你那么快关了干嘛啊!在System.out.println() 之后  ds.close();
作者: hello_world!    时间: 2012-10-24 14:49
服务器端:
注意我标记的红色部分,两个类类名相同,又在同一个包下,不出错才怪(除非你设置编译路径)。建议客户端类名改成UdpSendDemo,服务器端改成UdpReceDemo。
还有DatagramSocket ds= new DatagramSocket(10000); 客户端发送数据不需要绑定端口的,建议你最好把UDP通信原理弄清楚。但是如果你一定要绑定也行,服务器端就不能再绑定端口号10000.所以服务器端口号改成10001,就行了。楼上的解释是错误的。 在 ds.close(); 之前,数据已经读到数据包里面了。所以,即使关掉也无所谓。




作者: 张学东    时间: 2012-10-24 14:51
hello_world! 发表于 2012-10-24 14:49
  • package com.itheima.day23;
  • import java.io.IOException;

  • 我两个类的路径是不一样的  一个在eclipse里面写的  一个在myeclipse里面写的啊
    作者: 范贞亮    时间: 2012-10-24 14:53
    哦,今天多学一招了
    作者: hello_world!    时间: 2012-10-24 14:55
    张学东 发表于 2012-10-24 14:51
    我两个类的路径是不一样的  一个在eclipse里面写的  一个在myeclipse里面写的啊 ...

    那就是端口绑定出问题了,我把端口改了,程序就可以出结果了




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