java udp 编程_Java基础教程——UDP编程

UDP:User Datagram Protocol,用户数据报协议

服务端:

import java.net.*;

import java.io.*;

public class UdpServer {

public static final int PORT = 30000;

// 每个数据报最大为4K

private static final int DATA_LEN = 4096;

// 接收网络数据的字节数组

byte[] buff_in = new byte[DATA_LEN];

// 以指定字节数组创建准备接受数据的DatagramPacket对象

private DatagramPacket packet_in = new DatagramPacket(buff_in, buff_in.length);

// 定义一个用于发送的DatagramPacket对象

private DatagramPacket packet_out;

public void start() throws IOException {

try (

// 创建DatagramSocket对象

DatagramSocket socket = new DatagramSocket(PORT)) {

// 采用循环接受数据

while (true) {

// 读取Socket中的数据,读到的数据放入inPacket封装的数组里。

socket.receive(packet_in);

// 判断inPacket.getData()和inBuff是否是同一个数组

System.out.println(buff_in == packet_in.getData());

// 将接收到的内容转成字符串后输出

String _sIn = new String(buff_in, 0, packet_in.getLength());

System.out.println("服务器端:" + _sIn);

if ("shutdown".equals(_sIn)) {

break;

}

// 从字符串数组中取出一个元素作为发送的数据

byte[] sendData = ("服务器收到:" + _sIn).getBytes();

// 创建DatagramPacket作为回复

SocketAddress addr = packet_in.getSocketAddress();

packet_out = new DatagramPacket(sendData, sendData.length, addr);

// 发送数据

socket.send(packet_out);

}

System.out.println("=====服务器关闭=====");

}

}

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

new UdpServer().start();

}

}

客户端:

import java.net.*;

import java.io.*;

import java.util.*;

public class UdpClient {

// 定义发送数据报的目的地

public static final int DEST_PORT = 30000;

public static final String DEST_IP = "127.0.0.1";

// 定义每个数据报的最大大小为4K

private static final int DATA_LEN = 4096;

// 定义接收网络数据的字节数组

byte[] inBuff = new byte[DATA_LEN];

// 创建接受回复数据的DatagramPacket对象

private DatagramPacket packet_in = new DatagramPacket(inBuff, inBuff.length);

// 定义一个用于发送的DatagramPacket对象

private DatagramPacket packet_out = null;

public void start() throws IOException {

try (DatagramSocket socket = new DatagramSocket()) {

// 初始化发送用的DatagramSocket

InetAddress ip = InetAddress.getByName(DEST_IP);

packet_out = new DatagramPacket(new byte[0], 0, ip, DEST_PORT);

// 创建键盘输入流

Scanner sc = new Scanner(System.in);

System.out.println("请输入数据");

// 不断读取键盘输入

while (sc.hasNextLine()) {

String sUserInput = sc.nextLine();

if ("exit".equals(sUserInput)) {

break;

}

// 输入的字符串→字节数组

byte[] buff = sUserInput.getBytes();

// 设置发送用的DatagramPacket里的字节数据

packet_out.setData(buff);

// 发送数据报

socket.send(packet_out);

// 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。

socket.receive(packet_in);

System.out.println(new String(inBuff, 0, packet_in.getLength()));

System.out.println("请输入数据:");

}

System.out.println("===Client ENd===");

}

}

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

new UdpClient().start();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值