欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)多人聊天對(duì)話室

 更新時(shí)間:2021年08月16日 16:25:55   作者:肉坨  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)多人聊天對(duì)話室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

使用ServerSocket和Socket實(shí)現(xiàn)服務(wù)器端和客戶端的Socket通信。

了解完socket通信步驟后可以發(fā)現(xiàn)本實(shí)驗(yàn)需要寫(xiě)兩個(gè)類:Server和Client,并且要先運(yùn)行Server再運(yùn)行Client。

先構(gòu)造服務(wù)器端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;

/**
 * @author: Ren
 * @date: 2020-08-03  15:23
 * @description:
 */
public class TcpserverC2 {
    public static void main(String[] args) throws IOException {
//        定義多線程,讓多個(gè)用戶都可以參與到聊天室
        ExecutorService pool = new ScheduledThreadPoolExecutor(10);
//        綁定端口
        ServerSocket serverSocket = new ServerSocket(8888);
//        利用循環(huán)一直來(lái)讀取新的socket
        while (true) {
//            開(kāi)始serversocket偵聽(tīng)請(qǐng)求,這方法會(huì)阻塞等待tcp請(qǐng)求的到來(lái),一旦到來(lái),就返回
            Socket accept = serverSocket.accept();
            pool.execute(new Runnable() {
                Socket socket = accept;
//                定義字節(jié)數(shù)組來(lái)讀取輸入流
                byte[] buf = new byte[1024];
                @Override
                public void run() {
//                    定義輸入輸出流
                    InputStream in = null;
                    OutputStream out = null;
                    try {
                        in = socket.getInputStream();
                        out = socket.getOutputStream();
                        while (true) {
                            int len = in.read(buf);
                            System.out.println("服務(wù)器收到:" + new String(buf, 0, len, ("utf-8")));
                            // 聊天室服務(wù)端一般不會(huì)參與對(duì)話,所以一般不加這個(gè)功能
//                            String xitongshuohua = scanner.nextLine();
//                            out.write("謝謝".getBytes(Charset.forName("utf-8")));
                            out.write("謝謝".getBytes(("utf-8")));

                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}

再構(gòu)建客戶端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * @author: Ren
 * @date: 2020-08-03  15:23
 * @description:
 */
public class TcpClientC2 {
    public static void main(String[] args) throws IOException {
//        目標(biāo)地址,目標(biāo)端口
        Socket socket = new Socket("127.0.0.1",8888);
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();
        Scanner scanner = new Scanner(System.in);
        byte[] buf = new byte[1024];
        while (true) {
            String word = scanner.nextLine();
            out.write(word.getBytes(("utf-8")));
            int lrn = in.read(buf);
            System.out.println("服務(wù)端回復(fù):"+new String(buf,0,lrn,("utf-8")));
        }
    }
}

服務(wù)器端構(gòu)建在一個(gè)主機(jī)上,然后在多臺(tái)電腦創(chuàng)建客戶端,并訪問(wèn)服務(wù)器端所在的主機(jī)就可以構(gòu)成聊天室的效果,當(dāng)然前提是在同一個(gè)局域網(wǎng)下。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • spring-boot整合ehcache實(shí)現(xiàn)緩存機(jī)制的方法

    spring-boot整合ehcache實(shí)現(xiàn)緩存機(jī)制的方法

    spring-boot是一個(gè)快速的集成框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。這篇文章主要介紹了spring-boot整合ehcache實(shí)現(xiàn)緩存機(jī)制,需要的朋友可以參考下
    2018-01-01
  • Netty開(kāi)發(fā)及粘包實(shí)戰(zhàn)解決分析

    Netty開(kāi)發(fā)及粘包實(shí)戰(zhàn)解決分析

    這篇文章主要為大家介紹了Netty開(kāi)發(fā)及粘包實(shí)戰(zhàn)解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • Java 進(jìn)階必備之ssm框架全面整合

    Java 進(jìn)階必備之ssm框架全面整合

    SSM框架是spring MVC ,spring和mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層,controller層,service層,DAO層四層,使用spring MVC負(fù)責(zé)請(qǐng)求的轉(zhuǎn)發(fā)和視圖管理,spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,mybatis作為數(shù)據(jù)對(duì)象的持久化引擎
    2021-10-10
  • springBoot整合redis做緩存具體操作步驟

    springBoot整合redis做緩存具體操作步驟

    緩存主要是將數(shù)據(jù)存在計(jì)算機(jī)的內(nèi)存當(dāng)中,以便于在使用的時(shí)候是可以實(shí)現(xiàn)快速讀取使用,它的快也是相對(duì)于硬盤(pán)讀取而言,這篇文章主要給大家介紹了關(guān)于springBoot整合redis做緩存的具體操作步驟,需要的朋友可以參考下
    2024-04-04
  • 使用springboot aop來(lái)實(shí)現(xiàn)讀寫(xiě)分離和事物配置

    使用springboot aop來(lái)實(shí)現(xiàn)讀寫(xiě)分離和事物配置

    這篇文章主要介紹了使用springboot aop來(lái)實(shí)現(xiàn)讀寫(xiě)分離和事物配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法

    Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法

    這篇文章主要介紹了Java針對(duì)ArrayList自定義排序的2種實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了Java操作ArrayList自定義排序的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能示例

    java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能示例

    這篇文章主要介紹了java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能,結(jié)合完整實(shí)例形式分析了AES對(duì)稱加密算法的定義與使用技巧,需要的朋友可以參考下
    2017-01-01
  • Java協(xié)議字節(jié)操作工具類詳情

    Java協(xié)議字節(jié)操作工具類詳情

    這篇文章主要介紹了Java協(xié)議字節(jié)操作工具類詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Hadoop源碼分析六啟動(dòng)文件namenode原理詳解

    Hadoop源碼分析六啟動(dòng)文件namenode原理詳解

    本篇是Hadoop源碼分析系列文章第六篇,主要介紹Hadoop中的啟動(dòng)文件namenode,后續(xù)本系列文章會(huì)持續(xù)更新,有需要的朋友可以借鑒參考下
    2021-09-09
  • 詳談hibernate,jpa與spring?data?jpa三者之間的關(guān)系

    詳談hibernate,jpa與spring?data?jpa三者之間的關(guān)系

    這篇文章主要介紹了hibernate,jpa與spring?data?jpa三者之間的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論