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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢威 中级黑马   /  2013-7-20 08:41  /  1210 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢威 于 2013-7-22 14:26 编辑

为什么我的代码编译时候没有问题,运行时却出错了。
  1. import java.net.*;

  2. class  UdpSend
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 DatagramSocket ds = new DatagramSocket(10000);

  7.                 byte[] buf = "Udp xie wei Hello!".getBytes();

  8.                 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.101"),1000);

  9.                 ds.send(dp);

  10.                 ds.close();
  11.                
  12.         }
  13. }


  14. class UdpRece
  15. {
  16.         public static void main(String[] args)throws Exception
  17.         {
  18.                 DatagramSocket ds = new DatagramSocket(10000);

  19.                 byte[] buf = new byte[1024];

  20.                 DatagramPacket dp = new DatagramPacket(buf,buf.length);

  21.                 ds.receive(dp);

  22.                 String ip = dp.getAddress().getHostAddress();
  23.                 String data = new String(dp.getData(),0,dp.getLength());
  24.                 int port = dp.getPort();

  25.                 System.out.println(ip+"::"+data+"::"+port);

  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
  1. import java.net.*;

  2. class  UdpSend
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 DatagramSocket ds = new DatagramSocket(10001);

  7.                 byte[] buf = "Udp xie wei Hello!".getBytes();

  8.                 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.101"),10000);

  9.                 ds.send(dp);

  10.                 ds.close();
  11.                
  12.         }
  13. }


  14. class UdpRece
  15. {
  16.         public static void main(String[] args)throws Exception
  17.         {
  18.                 DatagramSocket ds = new DatagramSocket(10000);

  19.                 byte[] buf = new byte[1024];

  20.                 DatagramPacket dp = new DatagramPacket(buf,buf.length);

  21.                 ds.receive(dp);

  22.                 String ip = dp.getAddress().getHostAddress();
  23.                 String data = new String(dp.getData(),0,dp.getLength());
  24.                 int port = dp.getPort();

  25.                 System.out.println(ip+"::"+data+"::"+port);

  26.         }
  27. }
复制代码
//你的发送端的端口和接受端的端口号相同了,都是10000.如果发送端和接收端在同一台主机的话,这样,10000这个端口号就先被发送端先抢占,接收端不可以再使用这个端口号了。
//还有就是发送端的数据包中的指定的主机的端口号和接收端的端口号不一样。数据是发到指定主机了,但是接收端(端口号是10000)没收收到,只是发到指定主机的1000端口号了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
发送端不需要传入端口  因为在数据封包时已经封装了端口号了

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马