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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王鹏 中级黑马   /  2013-4-23 10:43  /  897 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-王鹏 于 2013-4-23 12:17 编辑
  1. import java.net.*;
  2. //需求:使用UDP传输方式,将一段文字数据发送出去
  3. class  UdpSend
  4. {
  5.         public static void main(String[] args)throws Exception
  6.         {
  7.                 //1.创建UDP服务
  8.        DatagramSocket ds = new DatagramSocket();
  9.            //2.创建数据,并将数据封装成包
  10.            byte [] buf = "hellow java".getBytes();
  11.            DatagramPacket dp =
  12.                    new DatagramPacket(buf,buf.length,InetAddress.getByName("10.11.116.14"),10000);
  13.            //3.通过Socket服务将已有的数据发送出去
  14.         ds.send(dp);
  15.                 //4.关闭资源
  16.         ds.close();
  17.         }
  18. }
  19. //需求:定义一个应用程序,用于接收udp协议传输的数据并处理
  20. class UdpReceive
  21. {
  22.         public static void main(String[] args)throws Exception
  23.         {
  24.                
  25.         //1.创建UDP服务,建立端点
  26.        DatagramSocket ds = new DatagramSocket(10000);
  27.            //2.定义数据包用于存储数据
  28.            Byte[] buf = new Byte[1024];
  29.           // DatagramPacket dp = new DatagramPacket(buf,buf.length);
  30.            DatagramPacket dp = new DatagramPacket(buf,buf.length);//为什么这里编译不通过啊?

  31.            //3.通过UDP服务的receive方法将接收到的数据存入已定义好的包中
  32.            ds.receive(dp);
  33.            //4.通过数据包中的方法访问数据
  34.            String ip = dp.getAddress().getHostAddress();
  35.            String data = new String(dp.getData(),0,dp.getLength());
  36.            int port = dp.getPort();
  37.            System.out.println(ip+":"+data+":"+port);
  38.            //5.关闭资源
  39.             ds.close();        
  40.         }
  41. }
复制代码

[3LO{9[[T(GZ8ZJK)C2[IOC.jpg (33.93 KB, 下载次数: 4)

[3LO{9[[T(GZ8ZJK)C2[IOC.jpg

1 个回复

正序浏览
UDP通信和TCP类似,但是UDP服务端发完信息后,不管客户端有没有接收信息
java.net 类 DatagramPacket
构造方法摘要
DatagramPacket(byte[] buf, int length) 构造 DatagramPacket,用来接收长度为 length 的数据包。

DatagramPacket(byte[] buf, int length, InetAddress address, int port)构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。       
方法
byte[]        getData()返回数据缓冲区。

int        getLength()返回将要发送或接收到的数据的长度。

java.net 类 DatagramSocket
构造方法摘要
        DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。

方法
void        receive(DatagramPacket p) 从此套接字接收数据报包。

void        send(DatagramPacket p) 从此套接字发送数据报包。
  1. 案例,用UDP模式进行通讯
  2. 先写客户端
  3. import java.net.*;
  4. public class UDPClient {
  5.         public static void main(String[] args) throws Exception{
  6.                 DatagramSocket ds=null;//声明客户端对象
  7.                 byte[] buf=new byte[1024];//开辟空间,接收数据
  8.                 DatagramPacket dp=null;//声明服务端对象
  9.                 ds=new DatagramSocket(8888);//客户端直接接收8888端口的数据
  10.                 dp=new DatagramPacket(buf, 1024);//数据保存在dp中
  11.                 ds.receive(dp);//接收数据
  12.                 String str=new String(dp.getData(),0,buf.length);
  13.                 System.out.println(dp.getAddress().getHostAddress()+":"+dp.getPort()+"说:"+str);
  14.         }
  15. }
  16. 再写服务端
  17. import java.net.DatagramPacket;
  18. import java.net.DatagramSocket;
  19. import java.net.InetAddress;
  20. public class UDPServer {
  21.         public static void main(String[] args) throws Exception{
  22.                 DatagramSocket ds=null;
  23.                 DatagramPacket dp=null;
  24.                 ds=new DatagramSocket(9000);
  25.                 String str="xx";//发送的数据
  26.                 dp=new DatagramPacket(str.getBytes(), str.length(),InetAddress.getByName("localhost"),8888);
  27.                 System.out.println("发送信息");
  28.                 ds.send(dp);
  29.                 ds.close();
  30.                 System.out.println("信息发送完毕");
  31.         }
  32. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马