java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信
本文實(shí)例為大家分享了java使用UDP實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信的具體代碼,供大家參考,具體內(nèi)容如下
整體的結(jié)構(gòu)思路:
Stu和Tea是收發(fā)消息的兩端;
Stu和Tea類(lèi)都是通過(guò)啟動(dòng)兩個(gè)線程完成通信的,這兩個(gè)線程分別是發(fā)消息線程和收消息線程;
Stu類(lèi)中啟動(dòng)的兩個(gè)線程分別寫(xiě)在兩個(gè)類(lèi)里,Tea也是這樣做。
Stu端及其收發(fā)消息代碼:
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() {
?? ??? ?// 創(chuàng)建接收方
?? ??? ?DatagramSocket socket;
?? ??? ?try {
?? ??? ??? ?socket = new DatagramSocket(port);
?? ??? ??? ?while(true) {
?? ??? ??? ??? ?// 準(zhǔn)備容器
?? ??? ??? ??? ?byte[] buf = new byte[1024];
?? ??? ??? ??? ?DatagramPacket dPacket = new DatagramPacket(buf, buf.length);
?? ??? ??? ??? ?// 阻塞式接受數(shù)據(jù)
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?socket.receive(dPacket);
?? ??? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// 分析數(shù)據(jù)
?? ??? ??? ??? ?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 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) {
?? ??? ??? ?// 準(zhǔn)備數(shù)據(jù)
?? ??? ??? ?br = new BufferedReader(new InputStreamReader(System.in));
?? ??? ? ? ?String msg;
?? ??? ??? ?try {
?? ??? ??? ??? ?msg = br.readLine();
?? ??? ??? ??? ?byte[] data = msg.getBytes();
?? ??? ??? ??? ?// 封裝數(shù)據(jù)
?? ??? ??? ??? ?DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);
?? ??? ??? ??? ?// 發(fā)送數(shù)據(jù)
?? ??? ??? ??? ?socket.send(dPacket);
?? ??? ??? ??? ?if(msg.equals("exit")) {
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ?}
?? ??? ?
?? ??? ?// 關(guān)閉資源
?? ??? ?try {
?? ??? ??? ?br.close();
?? ??? ??? ?socket.close();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ??? ?
?? ?}
?
}Tea端及其收發(fā)消息代碼:
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) {
?? ??? ??? ?// 準(zhǔn)備數(shù)據(jù)
?? ??? ??? ?br = new BufferedReader(new InputStreamReader(System.in));
?? ??? ??? ?String msg;
?? ??? ??? ?try {
?? ??? ??? ??? ?msg = br.readLine();
?? ??? ??? ??? ?byte[] data = msg.getBytes();
?? ??? ??? ??? ?// 封裝數(shù)據(jù)
?? ??? ??? ??? ?DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);
?? ??? ??? ??? ?// 發(fā)送數(shù)據(jù)
?? ??? ??? ??? ?socket.send(dPacket);
?? ??? ??? ??? ?if (msg.equals("exit")) {
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?
?? ??? ?}
?
?? ??? ?// 關(guān)閉資源
?? ??? ?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() {
?? ??? ?// 創(chuàng)建接收方
?? ??? ?DatagramSocket socket;
?? ??? ?try {
?? ??? ??? ?socket = new DatagramSocket(port);
?? ??? ??? ?while(true) {
?? ??? ??? ??? ?// 準(zhǔn)備容器
?? ??? ??? ??? ?byte[] buf = new byte[1024];
?? ??? ??? ??? ?DatagramPacket dPacket = new DatagramPacket(buf, buf.length);
?? ??? ??? ??? ?// 阻塞式接受數(shù)據(jù)
?? ??? ??? ??? ?try {
?? ??? ??? ??? ??? ?socket.receive(dPacket);
?? ??? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ??? ?}
?? ??? ??? ??? ?// 分析數(shù)據(jù)
?? ??? ??? ??? ?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) {
?? ??? ??? ?// 準(zhǔn)備數(shù)據(jù)
?? ??? ??? ?br = new BufferedReader(new InputStreamReader(System.in));
?? ??? ??? ?String msg;
?? ??? ??? ?try {
?? ??? ??? ??? ?msg = br.readLine();
?? ??? ??? ??? ?byte[] data = msg.getBytes();
?? ??? ??? ??? ?// 封裝數(shù)據(jù)
?? ??? ??? ??? ?DatagramPacket dPacket = new DatagramPacket(data, data.length, InetAddress.getByName(IP), port);
?? ??? ??? ??? ?// 發(fā)送數(shù)據(jù)
?? ??? ??? ??? ?socket.send(dPacket);
?? ??? ??? ??? ?if (msg.equals("exit")) {
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ?} catch (IOException e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?
?? ??? ?}
?
?? ??? ?// 關(guān)閉資源
?? ??? ?try {
?? ??? ??? ?br.close();
?? ??? ??? ?socket.close();
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?
?? ?}
?
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot?vue測(cè)試平臺(tái)接口定義及發(fā)送請(qǐng)求功能實(shí)現(xiàn)
這篇文章主要為大家介紹了springboot+vue測(cè)試平臺(tái)接口定義及發(fā)送請(qǐng)求功能實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
利用Postman和Chrome的開(kāi)發(fā)者功能探究項(xiàng)目(畢業(yè)設(shè)計(jì)項(xiàng)目)
這篇文章主要介紹了利用Postman和Chrome的開(kāi)發(fā)者功能探究項(xiàng)目(畢業(yè)設(shè)計(jì)項(xiàng)目),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Spring Security如何優(yōu)雅的增加OAuth2協(xié)議授權(quán)模式
這篇文章主要介紹了Spring Security如何優(yōu)雅的增加OAuth2協(xié)議授權(quán)模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java中orElse和orElseGet方法區(qū)別小結(jié)
這篇文章主要給大家介紹了關(guān)于java中orElse和orElseGet方法區(qū)別的相關(guān)資料,兩者之間的區(qū)別細(xì)微,但是卻在某些場(chǎng)景下顯的很重要,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
PowerJob的TransportServiceAware工作流程源碼解讀
這篇文章主要介紹了PowerJob的TransportServiceAware工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
基于redis setIfAbsent的使用說(shuō)明
這篇文章主要介紹了基于redis setIfAbsent的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01
使用maven構(gòu)建java9 service實(shí)例詳解
本篇文章主要介紹了使用maven構(gòu)建java9 service實(shí)例詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
java設(shè)計(jì)模式之裝飾器模式(Decorator)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之裝飾器模式Decorator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
JavaWeb倉(cāng)庫(kù)管理系統(tǒng)詳解
這篇文章主要為大家詳細(xì)介紹了JavaWeb倉(cāng)庫(kù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

