最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用TCP套接字實現(xiàn)多人聊天功能詳解

 更新時間:2019年10月15日 11:49:37   作者:hu_beliefs  
這篇文章主要介紹了Java使用TCP套接字實現(xiàn)多人聊天功能,結(jié)合實例形式詳細分析了java使用socket通信實現(xiàn)tcp協(xié)議下的聊天功能客戶端與服務(wù)器端相關(guān)實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Java使用TCP套接字實現(xiàn)多人聊天功能。分享給大家供大家參考,具體如下:

廢話不多說,直接開搞:

先創(chuàng)建一個服務(wù)端:

package interWebWriterEven2;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
 * 服務(wù)端
 * @author
 *
 */
public class ServiceT {
    static ArrayList<Socket> list = new ArrayList<Socket>();
    public static void main(String[] args) {
        ServerSocket server;
        try {
            server = new ServerSocket(9999);
            while(true){
                Socket socket = server.accept();
                System.out.println(socket.getInetAddress().getHostName()+"連接成功。IP:"+socket.getInetAddress().getHostAddress());
                list.add(socket);
                ServiceThreadT t =new ServiceThreadT(socket);
                t.start();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

接著是服務(wù)端的線程:

package interWebWriterEven2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/**
 * 服務(wù)端線程
 * @author
 *
 */
public class ServiceThreadT extends Thread{
    private Socket socket;
    public Socket getSocket() {
        return socket;
    }
    public void setSocket(Socket socket) {
        this.socket = socket;
    }
    public ServiceThreadT(Socket socket) {
        super();
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            @SuppressWarnings("resource")
            BufferedWriter wFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D://messagesT.txt",true)));
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String strOut = "";
            String strIn = "";
            while(true){
                strIn = socket.getInetAddress().getHostName()+":"+br.readLine();
                strOut = strIn;
                wFile.write(strIn);
                wFile.newLine();
                wFile.flush();
                for (Socket soc : ServiceT.list) {
                    if(soc != socket){
                        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
                        bw.write(strOut);
                        System.out.println(strOut);
                        bw.newLine();
                        bw.flush();
                    }
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

然后是客戶端(應(yīng)用端):

package interWebWriterEven2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
/**
 * 客戶端
 * @author
 *
 */
public class ClientT {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("127.0.0.1",9999);
            ClientThreadT t = new ClientThreadT(socket);
            t.start();
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String strIn = "";
            while(true){
                strIn = br.readLine();
                System.out.println(strIn);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

最后是客戶端的線程:

package interWebWriterEven2;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
/**
 * 客戶端的線程
 * @author
 *
 */
public class ClientThreadT extends Thread{
    private Socket socket;
    public Socket getSocket() {
        return socket;
    }
    public void setSocket(Socket socket) {
        this.socket = socket;
    }
    public ClientThreadT(Socket socket) {
        super();
        this.socket = socket;
    }
    @Override
    public void run() {
        @SuppressWarnings("resource")
        Scanner sc = new Scanner(System.in);
        try {
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            while(true){
                System.out.println();
                bw.write(sc.nextLine().trim());
                bw.newLine();
                bw.flush();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

先運行服務(wù)端哦,否則將會報空指針異常的。

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效

    win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效

    這篇文章主要介紹了win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java異步處理機制實例詳解

    Java異步處理機制實例詳解

    本文涉及Java編程中異步處理機制的簡單介紹和一個相關(guān)實例,相信通過這篇文章,大家能對異步處理有更多的了解。
    2017-09-09
  • Java 實戰(zhàn)項目錘煉之醫(yī)院門診收費管理系統(tǒng)的實現(xiàn)流程

    Java 實戰(zhàn)項目錘煉之醫(yī)院門診收費管理系統(tǒng)的實現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+html+jdbc+mysql實現(xiàn)一個醫(yī)院門診收費管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • easyExcel分批導(dǎo)入文件方式

    easyExcel分批導(dǎo)入文件方式

    這篇文章主要介紹了easyExcel分批導(dǎo)入文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Spring Boot中Redis數(shù)據(jù)庫的使用實例

    Spring Boot中Redis數(shù)據(jù)庫的使用實例

    Spring Boot中除了對常用的關(guān)系型數(shù)據(jù)庫提供了優(yōu)秀的自動化支持之外,對于很多NoSQL數(shù)據(jù)庫一樣提供了自動化配置的支持。本篇文章主要介紹了Spring Boot中Redis的使用實例代碼,有興趣的開業(yè)了解一下。
    2017-04-04
  • SSM框架搭建圖文教程(推薦)

    SSM框架搭建圖文教程(推薦)

    下面小編就為大家?guī)硪黄猄SM框架搭建圖文教程(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • java常用Lambda表達式使用場景源碼示例

    java常用Lambda表達式使用場景源碼示例

    這篇文章主要為大家介紹了java常用Lambda表達式使用場景源碼示例及應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Spring運行時動態(tài)注冊bean的方法

    Spring運行時動態(tài)注冊bean的方法

    這篇文章主要介紹了Spring運行時動態(tài)注冊bean的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • JAVA如何按字節(jié)截取字符串

    JAVA如何按字節(jié)截取字符串

    這篇文章主要介紹了JAVA如何按字節(jié)截取字符串,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java Stream的基本概念以及創(chuàng)建方法

    Java Stream的基本概念以及創(chuàng)建方法

    這篇文章主要介紹了Java Stream的基本概念以及創(chuàng)建方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08

最新評論

信阳市| 锡林浩特市| 大埔区| 巨鹿县| 盐亭县| 禹州市| 枝江市| 太湖县| 游戏| 阳东县| 新兴县| 霍山县| 浮山县| 永州市| 调兵山市| 博兴县| 旺苍县| 丹凤县| 镇原县| 鸡西市| 和林格尔县| 阳原县| 武鸣县| 龙海市| 莱阳市| 自治县| 湟中县| 尖扎县| 平原县| 平山县| 库尔勒市| 海安县| 祥云县| 天全县| 漳浦县| 贺兰县| 洛扎县| 淮阳县| 新竹县| 灌阳县| 城固县|