溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么用java?socket實(shí)現(xiàn)局域網(wǎng)聊天

發(fā)布時間:2022-05-20 09:07:35 來源:億速云 閱讀:109 作者:zzz 欄目:開發(fā)技術(shù)

這篇文章主要介紹“怎么用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ī)

怎么用java?socket實(shí)現(xiàn)局域網(wǎng)聊天

關(guān)于“怎么用java socket實(shí)現(xiàn)局域網(wǎng)聊天”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。

向AI問一下細(xì)節(jié)

免責(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)容。

AI