Java基于socket服务实现UDP协议的方法

这篇文章主要介绍了Java基于socket服务实现UDP协议的方法,通过两个简单实例分析了java通过socket实现UDP发送与接收的技巧,需要的朋友可以参考下

示例1

接收类:

package com.socket.demo;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class UDPReceiveDemo {

 public static void main(String[] args) throws IOException{

  System.out.println("接收端启动…………");

 /*

  2、建立UDPsocket的服务,必须明确一个端口号

  3、创建数据包,用于储存接收到的数据,方便用数据包对象的方法解析这些数据

  4、使用DatagramSocketreceive方法将接收到的数据存储到数据包中

  5、通过数据包的方法解析数据包中的数据

  5、关闭socket服务

  */

  //udpsocket服务,使用DatagramSocket对象

  DatagramSocket ds=new DatagramSocket(10002);

  //使用DatagramPacket将数据封装到该对象中

  byte[] buf=new byte[1024];

  DatagramPacket dp=new DatagramPacket(buf, buf.length);

  //通过udpsocket服务将数据包发送出去,通过send方法

  ds.receive(dp);

  //通过数据包的方法解析数据包中的数据,比如,地址、端口、数据内容等

  String ip=dp.getAddress().getHostAddress();

  //String name=dp.getAddress().getHostName();

  int port=dp.getPort();

  String text=new String(dp.getData(),0,dp.getLength());

  //System.out.println("-----"+ip+"-----"+name+"-----"+port+"-----"+text);

  System.out.println("-----"+ip+"----------"+port+"-----"+text);

  //关闭资源

  ds.close();

 }

}

发送类:

package com.socket.demo;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class UDPSendDemo {

 public static void main(String[] args) throws IOException{

  System.out.println("发送端启动…………");

 /*

  * 1、创建udp传输的发送端

  2、建立UDPsocket的服务

  3、将要发送的数据封装到数据包中

  4、通过udpsocket服务将数据包发送出去

  5、关闭socket服务

  */

  //udpsocket服务,使用DatagramSocket对象

  DatagramSocket ds=new DatagramSocket(8888);//监听端口

  //将要发送的数据封装到数据包中

  String str="udp传输演示,go";

  //使用DatagramPacket将数据封装到该对象中

  byte[] buf=str.getBytes();

  DatagramPacket dp=

    new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.100"),10002);

  //通过udpsocket服务将数据包发送出去,通过send方法

  ds.send(dp);

  //关闭资源

  ds.close();

 }

}

示例2

接收类:

package com.socket.demo;

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class UDPReceiveDemo2 {

 public static void main(String[] args) throws IOException{

  System.out.println("接收端启动…………");

 /*

  2、建立UDPsocket的服务,必须明确一个端口号

  3、创建数据包,用于储存接收到的数据,方便用数据包对象的方法解析这些数据

  4、使用DatagramSocketreceive方法将接收到的数据存储到数据包中

  5、通过数据包的方法解析数据包中的数据

  5、关闭socket服务

  */

  //udpsocket服务,使用DatagramSocket对象

  DatagramSocket ds=new DatagramSocket(10003);

  while(true){

   //使用DatagramPacket将数据封装到该对象中

   byte[] buf=new byte[1024];

   DatagramPacket dp=new DatagramPacket(buf, buf.length);

   //通过udpsocket服务将数据包发送出去,通过send方法

   ds.receive(dp);//阻塞式的。

   //通过数据包的方法解析数据包中的数据,比如,地址、端口、数据内容等

   String ip=dp.getAddress().getHostAddress();

   //String name=dp.getAddress().getHostName();

   int port=dp.getPort();

   String text=new String(dp.getData(),0,dp.getLength());

   //System.out.println("-----"+ip+"-----"+name+"-----"+port+"-----"+text);

   System.out.println("-----"+ip+"----------"+port+"-----"+text);

  }

  //关闭资源

  //ds.close();

 }

}

发送类:

package com.socket.demo;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

public class UDPSendDemo2 {

 public static void main(String[] args) throws IOException{

  System.out.println("发送端启动…………");

 /*

  * 1、创建udp传输的发送端

  2、建立UDPsocket的服务

  3、将要发送的数据封装到数据包中

  4、通过udpsocket服务将数据包发送出去

  5、关闭socket服务

  */

  //udpsocket服务,使用DatagramSocket对象

  DatagramSocket ds=new DatagramSocket(9999);//监听端口

  //将要发送的数据封装到数据包中

  //String str="udp传输演示,go";

  BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘输入

  String line=null;

  //使用DatagramPacket将数据封装到该对象中

  while((line=bufr.readLine())!=null){

   byte[] buf=line.getBytes();//

   DatagramPacket dp=

     new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.100"),10003);

   //通过udpsocket服务将数据包发送出去,通过send方法

   ds.send(dp);

   if("886".equals(line)){

    break;

   }

  }

  //关闭资源

  ds.close();

 }

}

运行效果图如下:

接收:

发送:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值