Java中UDP编程

来源:互联网 发布:软件导刊 编辑:程序博客网 时间:2024/06/18 10:07

1.UDP编程Server端

因为UDP协议不需要建立连接,它的过程如下。
  1. 构造DatagramSocket实例,指定本地端口。
  2. 通过DatagramSocket实例的receive方法接收DatagramPacket.DatagramPacjet中间就包含了通信的内容。
  3. 通过DatagramSocket的send和receive方法来收和发DatagramPcket。
典型的交互流程代码如下
 import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;/** * DUP编程之Server端 */public class Server {public static void main(String[] args) {try {// 1.构建DatagramSocket实例,指定本地端口DatagramSocket socket = new DatagramSocket(10000);byte[] buf = new byte[1024];// 2.构建需要收发的DatagramPacket报文--构造 DatagramPacket,用来接收长度为 length 的数据包。DatagramPacket packet = new DatagramPacket(buf, buf.length);while (true) {// 收报文---从此套接字接收数据报包,此方法在接收到数据报前一直阻塞socket.receive(packet);System.out.println("ip:" + packet.getAddress().getHostAddress());// 接收信息String receive = new String(packet.getData(),packet.getLength());System.out.println("接收信息" + receive);// 发报文String info = receive + "您好!";// 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。DatagramPacket dp = new DatagramPacket(info.getBytes(),info.getBytes().length, packet.getAddress(), 10000);// 为此包设置数据缓冲区。将此 DatagramPacket 的偏移量设置为 0,长度设置为 buf 的长度dp.setData(info.getBytes());// 从此套接字发送数据报包socket.send(dp);}} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

2.UDP编程客服端

UDP客服端的步骤也比较简单
  1. 构造DatagramSocket实例
  2. 通过DatagramSocket实例的send和receive方法发送DatagramPacket报文。
  3. 调用DatagramSocket的close方法关闭。
因为和TCP不同,UDP发送报文时可以在同一个本地端口随意发送给不同的服务器,一般不需要再UDP的DatagramSocket的构造函数中指定目的服务器的地址。
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;public class Client {public static void main(String[] args) {try {// 客服端建立连接,ip地址是本地,端口号是10000Socket s = new Socket("localhost", 10000);// 建立输出流,目的是为了向服务器端写数据PrintStream out = new PrintStream(s.getOutputStream());// 建立输出流,目的是为了向服务器端读取数据BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));// 从键盘写东西Scanner scan = new Scanner(System.in);while (true) {System.out.println("请输入:");String str = scan.nextLine();// 写数据out.println(str);// 读数据String line = in.readLine();System.out.println(line);scan.close();s.close();}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
























0 0
原创粉丝点击