Java中UDP编程
来源:互联网 发布:软件导刊 编辑:程序博客网 时间:2024/06/18 10:07
1.UDP编程Server端
因为UDP协议不需要建立连接,它的过程如下。
- 构造DatagramSocket实例,指定本地端口。
- 通过DatagramSocket实例的receive方法接收DatagramPacket.DatagramPacjet中间就包含了通信的内容。
- 通过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客服端的步骤也比较简单- 构造DatagramSocket实例
- 通过DatagramSocket实例的send和receive方法发送DatagramPacket报文。
- 调用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
- java中UDP编程
- Java中UDP编程
- 在Java中基于UDP协议编程
- 在Java中实现UDP协议编程
- 在Java中实现UDP协议编程
- JAVA中TCP/UDP编程实例
- JAVA中TCP/UDP编程实例
- 在java中实现UDP协议编程
- C#中UDP编程
- java udp网络编程
- java 网络编程 UDP
- java UDP编程
- java网络编程UDP
- java网络编程---udp
- java----UDP编程实例
- java UDP网路编程
- Java - 网络编程 - UDP
- Java网络编程UDP
- PHP运行及语句及逻辑
- php登录注册页面及加载
- llinux下 64位 MySQL 5.7.17 源码安装
- PHP基础 创建
- 简单理解js的prototype属性
- Java中UDP编程
- php解决中文截取乱码问题
- TensorFlow练习23: “恶作剧”
- Java的String中的subString()方法
- 用分治法求最大子序列问题,时间复杂度O(N*logN)
- PAT_1012. The Best Rank
- 链表创建之无头节点非空链表
- 102. Binary Tree Level Order Traversal (java)
- 泛型extends和super的注意点①