黑马程序员技术交流社区

标题: 关于网络通信的发送和接受问题 [打印本页]

作者: 谢威    时间: 2013-7-20 08:41
标题: 关于网络通信的发送和接受问题
本帖最后由 谢威 于 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. }
复制代码

作者: 月亮人生    时间: 2013-7-20 10:35
  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端口号了。
作者: 下雨天    时间: 2013-7-20 11:01
发送端不需要传入端口  因为在数据封包时已经封装了端口号了




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