您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用java socket實(shí)現(xiàn)局域網(wǎng)聊天”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“怎么用java socket實(shí)現(xiàn)局域網(wǎng)聊天”文章能幫助大家解決問題。
代碼很簡單分為兩個類,一個服務(wù)器類,一個客戶端,運(yùn)行時分別啟動兩個線程一個負(fù)責(zé)接受另一個負(fù)責(zé)發(fā)送。
整體流程是 兩臺機(jī)器分別啟動程序,一個選擇主動連接 另一個選擇被動接受,即可實(shí)現(xiàn)類似qq的聊天效果兩個人可以同時發(fā)送消息。
注意的事,不要在同一臺電腦上同時啟動兩個,這樣會服務(wù)端和客戶端的ip都是相同很有可能造成自己發(fā)送的消息自己接受到了,可以兩臺電腦或者虛擬機(jī)里面進(jìn)行。
服務(wù)端:
package com.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import com.client.RunClient; public class RunServer { public static Socket socket=null; /** * 建立服務(wù)器被動連接 * @throws IOException */ public void startServer() throws IOException { //服務(wù)器接收數(shù)據(jù) ServerSocket serverSocekt=new ServerSocket(8888); System.out.println("服務(wù)器啟動,等待連接..."); //創(chuàng)建客戶端線程 RunClient rc=new RunClient(); Thread rct=new Thread(rc); rct.start(); //阻塞線程 監(jiān)聽端口建立socket會話 RunServer.socket=serverSocekt.accept(); //獲取輸入留 InputStream is=socket.getInputStream(); //將字節(jié)輸入流轉(zhuǎn)換成字符輸入流 InputStreamReader isr=new InputStreamReader(is); //將字符輸入流裝入帶緩沖的輸入流中 BufferedReader br=new BufferedReader(isr); String str=null; while((str=br.readLine())!=null){ System.out.print("輸出信息:"+str); } socket.shutdownInput(); serverSocekt.close(); } }
客戶端:
package com.client; import java.io.BufferedWriter; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; import com.server.RunServer; public class RunClient implements Runnable { @Override public void run() { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); System.out.println("1、主動連接\n2、被動等待"); String sign=input.next(); switch (sign) { case "1": try { System.out.println("輸入服務(wù)器IP:"); startClient(input.next()); } catch (Exception e) { e.printStackTrace(); } break; case "2": try { startClient(); } catch (Exception e) { e.printStackTrace(); } break; default: break; } } /** * 由已經(jīng)建立的socket 進(jìn)行連接反向連 * @throws Exception * @throws UnknownHostException */ public void startClient() throws Exception{ while(true){ try { if(RunServer.socket!=null){ break; } Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } // 與服務(wù)器建立連接 Socket socket=new Socket(RunServer.socket.getInetAddress().getHostAddress(), 8888); System.out.println("連接建立成功..."); //向服務(wù)器寫入流 OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); Scanner input=new Scanner(System.in); while(true){ System.out.println("輸入信息:"); bw.write(input.next()); bw.newLine(); bw.flush(); } } /** * 通過IP與服務(wù)器建立連接 * @throws Exception * @throws UnknownHostException */ public void startClient(String ip) throws Exception{ // 與服務(wù)器建立連接 Socket socket=new Socket(ip, 8888); System.out.println("連接建立成功..."); //向服務(wù)器寫入流 OutputStream os=socket.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); Scanner input=new Scanner(System.in); while(true){ bw.write(input.next()); bw.newLine(); bw.flush(); } } }
main:
package com.start; import com.server.RunServer; public class Go { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub RunServer rs=new RunServer(); rs.startServer(); } }
效果:我是用虛擬機(jī)加本機(jī)
關(guān)于“怎么用java socket實(shí)現(xiàn)局域網(wǎng)聊天”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。