java实现的多人聊天(控制台输入)
Posted 大前端圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现的多人聊天(控制台输入)相关的知识,希望对你有一定的参考价值。
在学习android时,想做一个多人聊天室,不知如何动手
想先做一个纯java的简单多人聊天室,理理思路
通过Socket套接字进行数据传输
用到的知识点是:Socket,ServerSocket, 多线程
服务器程序:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.util.ArrayList;
//这个程序是被连接的程序,俗称服务器程序
//在程序界中,网络是指2个程序产生信息交互,那么构成网络
//所以网络必须要有2个程序以上,一端叫服务器,一端叫客户端,通常服务器和客户端的对应关系是1-N
public class SimpleServer
//用于保存当前连接的用户
public static ArrayList<Socket> socketList=new ArrayList<Socket>();
public static void main(String[] args)throws Exception
//创建一个serverSocket,用于监听客户端Socket的连接请求
ServerSocket serverSocket = new ServerSocket(10002);//10002为此服务器的端口号
System.out.println("服务启动");
//采用循环不断接收来自客户端的请求
while (true)
//每当接收到客户端的请求时,服务器端也对应产生一个Socket
Socket socket = serverSocket.accept();
System.out.println("服务连接");
// 把连接的客户端加入到list列表中
socketList.add(socket);
//启动一个新的线程
//任务线程,每个连接用都有一个属于自己专用的任务线程
//这个线程内会处理信息的发送和响应
new MyThread(socket,socketList).start();
/*
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
// 把输入的内容输出到client
while (true)
String msg = br.readLine();
pw.println("服务器说:" + msg);
*/
class MyThread extends Thread
Socket client;
ArrayList<Socket> clients;
BufferedReader br;
public MyThread(Socket client,ArrayList<Socket> clients)throws Exception
super();
this.client = client;
this.clients = clients;
br = new BufferedReader(new InputStreamReader(this.client.getInputStream()));
//把接收到的消息发送给各客户端
public void run()
try
String content=null;
while(true)
//从某个客户端读取信息
if((content=br.readLine())!=null)
for(Socket socket:clients)
if(client!=socket)
//把读取到的消息发送给各个客户端
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
pw.println(content);
content = URLDecoder.decode(content, "UTF-8");
System.out.println(content);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
客户端程序:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class Client
/**
* @param args
*/
public static void main(String[] args) throws Exception
// TODO Auto-generated method stub
//创建连接到本机,端口为10002的socket
Socket client = new Socket("192.168.3.26", 10002);
new MyThread(client).start();
InputStream is = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true)
String msg = br.readLine();
//对收到的信息进行解码
msg=URLDecoder.decode(msg, "UTF-8");
System.out.println(msg);
class MyThread extends Thread
Socket client;
public MyThread(Socket client)
super();
this.client = client;
public void run()
// 发出消息
try
BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
PrintWriter pw = new PrintWriter(client.getOutputStream(), true);
// 把输入的内容输出到socket
while (true)
String msg = br.readLine();
//对发出的消息进行编码
msg = URLEncoder.encode("张三说:" + msg, "UTF-8");
pw.println(msg);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
这仅仅是设计思路,有点简陋,只能从控制台发送接收消息
以上是关于java实现的多人聊天(控制台输入)的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot——SpringBoot集成WebSocket实现简单的多人聊天室
SpringBoot——SpringBoot集成WebSocket实现简单的多人聊天室
基于Java NIO的多人在线聊天工具源码实现(登录,单聊,群聊)