黑马程序员技术交流社区

标题: 关于UDP的发送与接收,大家来帮忙看看什么情况 [打印本页]

作者: 走遍世界找寻你    时间: 2013-9-2 08:35
标题: 关于UDP的发送与接收,大家来帮忙看看什么情况
import java.net.*;
class UdpSend
{
        public static void main(String[] args) throws Exception
        {
                //通过DatagramSocket对象,创建UDP服务
                DatagramSocket ds = new DatagramSocket();
                //确定数据,并封装成数据包,DatagramPacket(byte[] buf,int length,InetAddress address,int port )
                byte[] buf = "udp ge man lail e".getBytes();
                DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.153"),10000);
                //通过socket服务,将已有数据包发送,通过send方法。
                ds.send(dp);
                //关闭资源
                ds.close();
        }
}
class UdpRece
{
        public static void main(String[] args) throws Exception
        {
                //简历udp socket服务,建立端点
                DatagramSocket ds = new DatagramSocket(10000);
                //定义数据包,用于储存数据
                byte[] buf = new byte[1024];
                DatagramPacket dp = new DatagramPacket(buf,buf.length);
                //通过receive方法接收数据存入数据包
                ds.receive(dp);
                //通过数据包的方法获取其中数据
                String ip = dp.getAddress().getHostAddress();
                String data = new String(dp.getData(),0,dp.getLength());
                int port = dp.getPort();
                System.out.println(ip+"::::"+port);
                //关闭资源
                ds.close();
        }
}
异可以通过,但是发送的数据接收不到,是怎么回事?求帮助,求解答!!!


作者: 辛春鹏    时间: 2013-9-2 09:04
你接收到的数据存在data字符串中,可是你并没有打印出来啊。你只打印了ip和端口号
作者: binghaiwang    时间: 2013-9-2 09:14
本帖最后由 binghaiwang 于 2013-9-2 09:20 编辑
  1. import java.net.*;
  2. public class Test
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 //通过DatagramSocket对象,创建UDP服务
  7.                 DatagramSocket ds = new DatagramSocket();
  8.                 //确定数据,并封装成数据包,DatagramPacket(byte[] buf,int length,InetAddress address,int port )
  9.                 byte[] buf = "udp ge man lail e".getBytes();
  10.                 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10000);
  11.                 //通过socket服务,将已有数据包发送,通过send方法。
  12.                 ds.send(dp);
  13.                 //关闭资源
  14.                 ds.close();
  15.         }
  16. }
  17. class UdpRece
  18. {
  19.         public static void main(String[] args) throws Exception
  20.         {
  21.                 //简历udp socket服务,建立端点
  22.                 DatagramSocket ds = new DatagramSocket(10000);
  23.                 //定义数据包,用于储存数据
  24.                 byte[] buf = new byte[1024];
  25.                 DatagramPacket dp = new DatagramPacket(buf,buf.length);
  26.                 //通过receive方法接收数据存入数据包
  27.                 ds.receive(dp);
  28.                 //通过数据包的方法获取其中数据
  29.                 String ip = dp.getAddress().getHostAddress();
  30.                 String data = new String(dp.getData(),0,dp.getLength());
  31.                 int port = dp.getPort();
  32.                 System.out.println(data);
  33.                 System.out.println(ip+"::::"+port);
  34.                 //关闭资源
  35.                 ds.close();
  36.         }
  37. }
复制代码
注意看下你自己本机的Ip地址,还有你的语句没有打印输出data 我帮你补上就OK了
作者: 第一印象    时间: 2013-9-2 09:27
本帖最后由 第一印象 于 2013-9-2 09:28 编辑

你的代码没问题,数据也能接收,你检查下IP地址写得对不对,还有一个,你接受的消息没有打印啊,你的接收端打印的是ip地址和端口地址,你把接收端的data打印一下就可以看到结果了,代码如下:

  1. import java.net.DatagramPacket;
  2. import java.net.DatagramSocket;

  3. public class UdpRece {

  4.         /**
  5.          * @param args
  6.          */
  7.          public static void main(String[] args) throws Exception
  8.      {
  9.              //简历udp socket服务,建立端点
  10.              DatagramSocket ds = new DatagramSocket(10000);
  11.              //定义数据包,用于储存数据
  12.              byte[] buf = new byte[1024];
  13.              DatagramPacket dp = new DatagramPacket(buf,buf.length);
  14.              //通过receive方法接收数据存入数据包
  15.              ds.receive(dp);
  16.              //通过数据包的方法获取其中数据
  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+"::::"+port);
  21.              //接收到的数据
  22.              System.out.println(data);
  23.              //关闭资源
  24.              ds.close();
  25.      }

  26. }
复制代码

作者: 走遍世界找寻你    时间: 2013-9-2 11:18
第一印象 发表于 2013-9-2 09:27
你的代码没问题,数据也能接收,你检查下IP地址写得对不对,还有一个,你接受的消息没有打印啊,你的接收端 ...

太详细了谢谢





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