Java使用TCP套接字实现多人聊天功能详解

所属分类: 软件编程 / java 阅读数: 49
收藏 0 赞 0 分享

本文实例讲述了Java使用TCP套接字实现多人聊天功能。分享给大家供大家参考,具体如下:

废话不多说,直接开搞:

先创建一个服务端:

package interWebWriterEven2;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
 * 服务端
 * @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();
        }
    }
}

接着是服务端的线程:

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;
/**
 * 服务端线程
 * @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();
        }
    }
}

然后是客户端(应用端):

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();
        }
    }
}

先运行服务端哦,否则将会报空指针异常的。

更多关于java相关内容感兴趣的读者可查看本站专题:《Java Socket编程技巧总结》、《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多