黑马程序员技术交流社区

标题: 网络编程 [打印本页]

作者: 赵庆礼    时间: 2012-7-5 18:27
标题: 网络编程
本帖最后由  赵庆礼 于 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-5 20:09
DatagramPacket dp =
   new DatagramPacket( buf, buf.length,InetAddress.getByName("202.106.195.30"), 10000);
中InetAddress.getByName("127.0.0.1")  你如果是在本机上测试的话 要用这个ip   
作者: 赵倩倩    时间: 2012-7-5 20:30
对了还有你的接收端要加上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();
        }
作者: 赵庆礼    时间: 2012-7-5 20:59
赵倩倩 发表于 2012-7-5 20:30
对了还有你的接收端要加上while(true)这样才能不断循环一直接受消息,要不消息会断掉
我的代码如下
clas ...

谢谢指点啊,我刚才试了下,可以运行了




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