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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵庆礼 中级黑马   /  2012-7-5 18:27  /  1693 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由  赵庆礼 于 2012-7-5 21:00 编辑

import java.net.*;
class UdpSend
{
public static void main(String[] args) throws Exception
{
  //1,创建udp服务,通过DatagramSocket对象,可以自定义端口号new DatagramSocket(1111);
  DatagramSocket ds = new DatagramSocket();
  
  //2,确定数据,并封装成数据包,DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        //  构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号
  byte[] buf = "udp shu ju ".getBytes();
  DatagramPacket dp =
   new DatagramPacket( buf, buf.length,InetAddress.getByName("202.106.195.30"), 10000);
  
  //通过socket服务,将已有数据包发送出去,通过send方法
  ds.send( dp );
  
  //关闭资源
  ds.close();
}
}
class UdpReceive
{
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+"::"+data+"::"+port);
  ds.close();
}
}

求解,为什么我的和毕老师的视频上写的一样,就是打印不出来东西啊,请大侠帮我分析一下,谢谢

点评

建议楼主以后将代码缩进写好,这样才方便同学们查看你的问题代码。  发表于 2012-7-6 01:16

3 个回复

倒序浏览
DatagramPacket dp =
   new DatagramPacket( buf, buf.length,InetAddress.getByName("202.106.195.30"), 10000);
中InetAddress.getByName("127.0.0.1")  你如果是在本机上测试的话 要用这个ip   
回复 使用道具 举报
对了还有你的接收端要加上while(true)这样才能不断循环一直接受消息,要不消息会断掉
我的代码如下
class  UdpRece
{
        public static void main(String[] args)
        {
                //1、创建udp socket,建立端点,
                //注意:不能放while里,因为有绑定异常,地址已经被使用。
                DatagramSocket ds=new DatagramSocket(10000);
                while (true)
                {
                        //2、定义数据包,用于存储数据。
                        byte[] buf=new byte[1024];
                        DatagramPacket dp=new DatagramPacket(buf,buf.length);

                        //3、通过服务的receive方法将受到数据存入数据包中
                        ds.receive(dp);//是阻塞是方法

                        //4、通过数据包的方法获取其中的数据
                        String ip=dp.getAddress().getHostAddress();
                        String data=new String(dp.getData(),0,dp.getLength());

                        int port=dp.getPort();
                        System.out.println(ip+"::"+data+"::"+port);

                }
               
               
                //5、关闭资源
                ds.close();
        }

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
赵倩倩 发表于 2012-7-5 20:30
对了还有你的接收端要加上while(true)这样才能不断循环一直接受消息,要不消息会断掉
我的代码如下
clas ...

谢谢指点啊,我刚才试了下,可以运行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马