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

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

实现效果:

e48b5fb8af58

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值