java使用UDP实现点对点通信

网友投稿 303 2022-07-23


本文实例为大家分享了java使用UDP实现点对点通信的具体代码,供大家参考,具体内容如下

整体的结构思路:

Stu和Tea是收发消息的两端;

Stu和Tea类都是通过启动两个线程完成通信的,这两个线程分别是发消息线程和收消息线程;

Stu类中启动的两个线程分别写在两个类里,Tea也是这样做。

Stu端及其收发消息代码:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

public class Stu {

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

new Thread(new StuSendThread("127.0.0.1", 8888)).start();

new Thread(new StuReceiverThread(8889)).start();

}

}

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketException;

public class StuReceiverThread implements Runnable{

private int port;

public StuReceiverThread(int port) {

this.port = port;

}

@Override

public void run() {

// 创建接收方

DatagramSocket socket;

try {

socket = new DatagramSocket(port);

while(true) {

// 准备容器

byte[] buf = new byte[1024];

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

// 阻塞式接受数据

try {

socket.receive(dPacket);

} catch (IOException e) {

e.printStackTrace();

}

// 分析数据

System.out.println(new String(buf));

if (new String(buf).equals("exit")) {

break;

}

}

// 释放资源

socket.close();

} catch (SocketExchttp://eption e1) {

e1.printStackTrace();

}

}

}

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputShEyBqIqHSTtreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

public class StuSendThread implements Runnable{

private DatagramSocket socket;

private BufferedReader br;

String IP;

int port;

public StuSendThread(String IP, int port) throws SocketException {

socket = new DatagramSocket();

br = new BufferedReader(new InputStreamReader(System.in));

this.IP = IP;

this.port = port;

}

@Override

public void run() {

while(true) {

// 准备数据

br = new BufferedReader(new InputStreamReader(System.in));

String msg;

try {

msg = br.readLine();

byte[] data = msg.getBytes();

// 封装数据

DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);

// 发送数据

socket.send(dPacket);

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

break;

}

} catch (IOException e) {

e.printStackTrace();

}

}

// 关闭资源

try {

br.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

Tea端及其收发消息代码:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

public class TeaSendThread implements Runnable{

private DatagramSocket socket;

private BufferedReader br;

String IP;

int port;

public TeaSendThread(String IP, int port) throws SocketException {

socket = new DatagramSocket();

br = new BufferedReader(new InputStreamReader(System.in));

this.IP = IP;

this.port = port;

}

@Override

public void run() {

while (true) {

// 准备数据

br = new BufferedReader(new InputStreamReader(System.in));

String msg;

try {

msg = br.readLine();

byte[] data = msg.getBytes();

// 封装数据

DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);

// 发送数据

socket.send(dPacket);

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

break;

}

} catch (IOException e) {

e.printStackTrace();

}

}

// 关闭资源

try {

br.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

import java.io.IOException;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.SocketException;

public class TeaReceiverTread implements Runnable{

private int port;

public TeaReceiverTread(int port) {

this.port = port;

}

@Override

public void run() {

// 创建接收方

DatagramSocket socket;

try {

socket = new DatagramSocket(port);

while(true) {

// 准备容器

byte[] buf = new byte[1024];

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

// 阻塞式接受数据

try {

socket.receive(dPacket);

} catch (IOException e) {

e.printStackTrace();

}

// 分析数据

System.out.println(new String(buf));

if (new String(buf).equals("exit")) {

break;

}

}

// 释放资源

socket.close();

} catch (SocketException e1) {

e1.printStackTrace();

}

}

}

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

public class TeaSendThread implements Runnable{

private DatagramSocket socket;

private BufferedReader br;

String IP;

int port;

public TeaSendThread(String IP, int port) throws SocketException {

socket = new DatagramSocket();

br = new BufferedReader(new InputStreamReader(System.in));

this.IP = IP;

this.port = port;

}

@Override

public void run() {

while (true) {

// 准备数据

br = new BufferedReader(new InputStreamReader(System.in));

String msg;

try {

msg = br.readLine();

byte[] data = msg.getBytes();

// 封装数据

DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);

// 发送数据

socket.send(dPacket);

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

break;

}

} catch (IOException e) {

e.printStackTrace();

}

}

// 关闭资源

try {

br.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Springboot 多租户SaaS搭建方案
下一篇:实例详解Java调用第三方接口方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~