200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java编程简单网络_Java网络编程之使用Socket搭建一个简易聊天室

java编程简单网络_Java网络编程之使用Socket搭建一个简易聊天室

时间:2023-06-06 15:01:51

相关推荐

java编程简单网络_Java网络编程之使用Socket搭建一个简易聊天室

使用Socket来搭建一个cmd的简易聊天窗口:

实现效果:

1.PNG

需要的类有:

1、监听客户端连接线程

2、客户端类

3、客户端管理类

主方法:

public static void main(String[] args) throws IOException {

//开启一个接收连接的子线程

Thread thread = new Thread(new MyThread());

thread.start();

}

监听客户端连接的线程类:

static class MyThread implements Runnable {

//服务端

ServerSocket server = new ServerSocket(8000);

MyThread() throws IOException {

}

@Override

public void run() {

while (true){

//客户端

try {

Socket client = server.accept();

//添加客户端

SocketClient socketClient = new SocketClient(client);

socketClient.start(); //开始运行客户端

ClientManage.getInstance().add(socketClient);

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

//客户端,继承Thread类,每一个聊天窗口都用一个线程执行

static class SocketClient extends Thread {

private Socket client;

private PrintStream print; //打印流

private BufferedReader br;

private boolean flag = true;

//初始化

public SocketClient(Socket client) throws IOException {

this.client = client;

//客户端输出流

print = new PrintStream(client.getOutputStream());

print.write(getString("连接成功啦!"));

print.println();

br = new BufferedReader(new InputStreamReader(client.getInputStream(),"GBK"));

}

//关闭客户端

private void closeClient() throws IOException {

br.close();

print.close();

client.close();

}

@Override

public void run() {

while (flag){

String str;

try {

str = br.readLine();

if ("exit".equalsIgnoreCase(str)){

flag = false;

print.println();

print.write(getString("退出连接!"));

ClientManage.chatPrint(this,"退出了群聊!");

closeClient(); //关闭客户端

}else {

print.write(getString("你输入了:" + str));

print.println();

//聊天室,群发消息给各个线程

if (str!=null){

ClientManage.chatPrint(this,str);

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

//输出

public void out(String str,String name) throws IOException {

print.write(getString(name + "输入了:" + str));

print.println();

}

//格式转换,不然输出乱码

private static byte[] getString(String str) throws UnsupportedEncodingException {

return str.getBytes("GBK");

}

}

//客户端管理类

static class ClientManage{

private static Vector clientList = new Vector<>();

public ClientManage(){

}

//遍历输出聊天消息,实现群聊功能

public static void chatPrint(SocketClient socketClient,String str) throws IOException {

for (SocketClient vector : clientList){

if (!vector.equals(socketClient)){

vector.out(str,socketClient.getName());

}

}

}

public static Vector getInstance(){

return clientList;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。