java 多線程實(shí)現(xiàn)在線咨詢(udp)
更新時(shí)間:2020年11月21日 09:01:34 作者:Hateyes
這篇文章主要介紹了java 多線程實(shí)現(xiàn)在線咨詢(udp)的示例,幫助大家更好的理解和學(xué)習(xí)Java 網(wǎng)絡(luò)編程的相關(guān)內(nèi)容,感興趣的朋友可以了解下
在線咨詢:兩個(gè)人都可以是發(fā)送方,也可以是接收方,實(shí)現(xiàn)網(wǎng)上在線咨詢正常通信。
聊天發(fā)送線程
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; /** * 聊天發(fā)送線程: * 重寫 run 方法通過(guò) implements 關(guān)鍵字實(shí)現(xiàn) Runnable 接口 * 重寫方法快捷鍵:Ctrl + O */ public class TalkSend implements Runnable { DatagramSocket socket = null; BufferedReader reader = null; private int fromPort; //從哪個(gè)端口 private String toIP; //到哪個(gè)地址 private int toPort; //到哪個(gè)端口 //構(gòu)造:Alt + Insert public TalkSend(int fromPort, String toIP, int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; //快捷鍵:Ctrl + Alt + T try { //構(gòu)造一個(gè)數(shù)據(jù)報(bào)套接字并將其綁定到本地主機(jī)上的指定端口 socket = new DatagramSocket(fromPort); //準(zhǔn)備數(shù)據(jù):控制臺(tái)讀?。篠ystem.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, 0 , dataBytes.length, new InetSocketAddress(this.toIP, this.toPort)); //發(fā)送數(shù)據(jù)包 socket.send(packet); //當(dāng)發(fā)送一句 bye 的時(shí)候表示結(jié)束發(fā)送 if (data.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } //關(guān)閉 socket.close(); } }
聊天接收線程
package chat; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * 聊天接收線程: * 重寫 run 方法通過(guò) implements 關(guān)鍵字實(shí)現(xiàn) Runnable 接口 * 重寫方法快捷鍵:Ctrl + O */ public class TalkReceive implements Runnable { DatagramSocket socket = null; private int port; private String msgFrom; //構(gòu)造 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 { //準(zhǔn)備接收數(shù)據(jù)包 byte[] container = new byte[1024]; DatagramPacket packet = new DatagramPacket(container, 0, container.length); //接收數(shù)據(jù)包 socket.receive(packet); //阻塞式接收包裹 //讀取數(shù)據(jù) byte[] data = packet.getData(); String receiveData = new String(data, 0, data.length); //接收到的數(shù)據(jù) System.out.println(msgFrom + ":" + receiveData); //當(dāng)我們說(shuō)一聲 bye 的時(shí)候就表示斷開(kāi)連接 if (receiveData.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } //關(guān)閉 socket.close(); } }
學(xué)生端
package chat; /** * 學(xué)生端 */ public class TalkStudent { public static void main(String[] args) { /** * 學(xué)生端 * 從 7777 端口發(fā)送消息 * 發(fā)送消息到 9999 端口 * 從 8888 端口接收消息 * * 開(kāi)啟兩個(gè)線程: * new TalkSend:從 77777 端口發(fā)送,發(fā)送到 localhost,發(fā)送給 9999 端口 * @param fromPort * @param toIP * @param toPort * * new TalkReceive:從 8888 端口接收,接收來(lái)自 “老師” 的消息 * @param port * @param msgFrom * * 使用了一種模式:靜態(tài)代理模式 */ 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 端口發(fā)送消息 * 發(fā)送消息到 8888 端口 * 從 9999 端口接收消息 * * 開(kāi)啟兩個(gè)線程: * new TalkSend:從 5555 端口發(fā)送,發(fā)送到 localhost,發(fā)送給 8888 端口 * @param fromPort * @param toIP * @param toPort * * new TalkReceive:從 9999 端口接收,接收來(lái)自 “學(xué)生” 的消息 * @param port * @param msgFrom * * 使用了一種模式:靜態(tài)代理模式 */ new Thread(new TalkSend(5555, "localhost", 8888)).start(); new Thread(new TalkReceive(9999, "學(xué)生")).start(); } }
效果一覽
以上就是java實(shí)現(xiàn)的多線程實(shí)現(xiàn)在線咨詢(udp)的詳細(xì)內(nèi)容,更多關(guān)于java 在線咨詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
相關(guān)文章
動(dòng)力節(jié)點(diǎn)_王勇_DRP項(xiàng)目視頻教程完整版292集
該視頻由國(guó)內(nèi)知名講師王勇老師主講,適合掌握J(rèn)ava基礎(chǔ)內(nèi)容的同學(xué)學(xué)習(xí),本視頻共計(jì)292集,學(xué)習(xí)Java Web項(xiàng)目,DRP項(xiàng)目視頻是首選,累計(jì)下載量已經(jīng)達(dá)到上千萬(wàn),很多同學(xué)通過(guò)自學(xué)該視頻找到了軟件開(kāi)發(fā)工作2017-04-04Java中的HashMap內(nèi)存泄漏問(wèn)題詳解
這篇文章主要介紹了Java中的HashMap內(nèi)存泄漏問(wèn)題詳解,WeakHashMap中的key是弱引用,如果再使用之后沒(méi)有及時(shí)remove掉這個(gè)key,那么當(dāng)GC時(shí)key就可能會(huì)被回收,導(dǎo)致key對(duì)應(yīng)的value對(duì)象占用的內(nèi)存無(wú)法回收進(jìn)而導(dǎo)致內(nèi)存泄漏,需要的朋友可以參考下2023-09-09