java 多執行緒實現線上諮詢(udp)
阿新 • • 發佈:2020-11-23
線上諮詢:兩個人都可以是傳送方,也可以是接收方,實現網上線上諮詢正常通訊。
聊天傳送執行緒
package chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; /** * 聊天傳送執行緒: * 重寫 run 方法通過 implements 關鍵字實現 Runnable 介面 * 重寫方法快捷鍵:Ctrl + O */ public class TalkSend implements Runnable { DatagramSocket socket = null; BufferedReader reader = null; private int fromPort; //從哪個埠 private String toIP; //到哪個地址 private int toPort; //到哪個埠 //構造:Alt + Insert public TalkSend(int fromPort,String toIP,int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; //快捷鍵:Ctrl + Alt + T try { //構造一個數據報套接字並將其繫結到本地主機上的指定埠 socket = new DatagramSocket(fromPort); //準備資料:控制檯讀取:System.in reader = new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { String data = reader.readLine(); byte[] dataBytes = data.getBytes(); DatagramPacket packet = new DatagramPacket(dataBytes,dataBytes.length,new InetSocketAddress(this.toIP,this.toPort)); //傳送資料包 socket.send(packet); //當傳送一句 bye 的時候表示結束髮送 if (data.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } //關閉 socket.close(); } }
聊天接收執行緒
package chat; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * 聊天接收執行緒: * 重寫 run 方法通過 implements 關鍵字實現 Runnable 介面 * 重寫方法快捷鍵:Ctrl + O */ public class TalkReceive implements Runnable { DatagramSocket socket = null; private int port; private String msgFrom; //構造 public TalkReceive(int port,String msgFrom) { this.port = port; this.msgFrom = msgFrom; try { socket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { //準備接收資料包 byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container,container.length); //接收資料包 socket.receive(packet); //阻塞式接收包裹 //讀取資料 byte[] data = packet.getData(); String receiveData = new String(data,data.length); //接收到的資料 System.out.println(msgFrom + ":" + receiveData); //當我們說一聲 bye 的時候就表示斷開連線 if (receiveData.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } //關閉 socket.close(); } }
學生端
package chat; /** * 學生端 */ public class TalkStudent { public static void main(String[] args) { /** * 學生端 * 從 7777 埠傳送訊息 * 傳送訊息到 9999 埠 * 從 8888 埠接收訊息 * * 開啟兩個執行緒: * new TalkSend:從 77777 埠傳送,傳送到 localhost,傳送給 9999 埠 * @param fromPort * @param toIP * @param toPort * * new TalkReceive:從 8888 埠接收,接收來自 “老師” 的訊息 * @param port * @param msgFrom * * 使用了一種模式:靜態代理模式 */ new Thread(new TalkSend(7777,"localhost",9999)).start(); new Thread(new TalkReceive(8888,"老師")).start(); } }
老師端
package chat; /** * 老師端 */ public class TalkTeacher { public static void main(String[] args) { /** * 老師端 * 從 5555 埠傳送訊息 * 傳送訊息到 8888 埠 * 從 9999 埠接收訊息 * * 開啟兩個執行緒: * new TalkSend:從 5555 埠傳送,傳送給 8888 埠 * @param fromPort * @param toIP * @param toPort * * new TalkReceive:從 9999 埠接收,接收來自 “學生” 的訊息 * @param port * @param msgFrom * * 使用了一種模式:靜態代理模式 */ new Thread(new TalkSend(5555,8888)).start(); new Thread(new TalkReceive(9999,"學生")).start(); } }
效果一覽
以上就是java實現的多執行緒實現線上諮詢(udp)的詳細內容,更多關於java 線上諮詢的資料請關注我們其它相關文章!