TCP多人聊天程序Java实现(群聊,私聊,在线用户,踢出用户)

这个TCP聊天程序在原有的基础上增加了私聊和踢出用户的功能。程序由客户端和服务器端组成,使用JSON进行数据处理,并依赖特定的包。用户操作包括群聊、私聊以及管理在线用户,详细流程可在注释中查看。

本程序在程序 https://blog.youkuaiyun.com/joffy/article/details/18079331 的基础是上添加了私聊,踢出用户两个功能。

由客户端和服务器端构成程序,程序借助Json包处理数据,项目需要导入包。

程序具体流程看注释。

用户 Bean

package com.server;

import java.net.Socket;

/**
 * 用户 JavaBean
 */
public class User {

	private String UserName = "";
	private Socket socket;

	public String getUserName() {
		return UserName;
	}

	public void setUserName(String userName) {
		UserName = userName;
	}

	public Socket getSocket() {
		return socket;
	}

	public void setSocket(Socket socket) {
		this.socket = socket;
	}

}

 

服务器类

package com.server;

import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import net.sf.json.JSONObject;

/**
 * 服务器类,继承JFrame,实现窗口化界面
 */
public class Server extends JFrame {

	// 在线用户列表
	ArrayList<User> clientList = new ArrayList<User>();
	// 在线用户名列表
	ArrayList<String> usernamelist = new ArrayList<String>();
	// 创建一个信息显示框
	private JTextArea jta = new JTextArea();
	// 用于要踢除用户名的输入框
	private JTextField jtf=new JTextField();
	// 踢除用户名
	private String usernameOut=null;
	// 声明一个用户对象,该类里面有两个变量 socket,username;
	private User user = null;
	// 声明一个输出流
	DataOutputStream output = null;
	// 声明一个输入流
	DataInputStream input = null;
 
	public static void main(String[] args) {
		new Server();
	}

	/**
	 * 服务器构造方法, 绘画图形界面 , 监听socket连接
	 */
	public Server() {
		// 设置信息显示框版面
		setLayout(new BorderLayout());
		add(new JScrollPane(jta), BorderLayout.CENTER);
		jta.setEditable(false);
		jta.setFont(new Font("", 0, 18));
		
		//设置要踢除用户的输入框
		jtf.setFont(new Font("", 0, 18));

		final JPanel p = new JPanel();
		p.setLayout(new BorderLayout());
		JLabel jLabel = new JLabel("输入要踢除用户的名称,按回车发送");
		jLabel.setFont(new Font("", 0, 20));
		p.add(jLabel, BorderLayout.WEST);
		p.add(jtf, BorderLayout.CENTER);
		jtf.setHorizontalAlignment(JTextField.LEFT);
		add(p, BorderLayout.SOUTH);
		
		jtf.addActionListener(new ButtonListener());
		
		setTitle("服务器 ");
		setSize(800, 400);
		setLocation(100, 500);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true); //

		try {
			// 创建一个服务器socket,绑定端口8000
			ServerSocket serverSocket = new ServerSocket(8080);
			// 打印启动时间
			jta.append("服务器启动时间 " + new Date() + "\n\n");

			// 无限循环监听是否有新的客户端连接
			while (true) {
				
				// 监听一个新的连接
				Socket socket = serverSocket.accept();
				if (socket != null) {
					// 获取上线用户的信息
					input = new DataInputStream(socket.getInputStream());
					String json = input.readUTF();
					JSONObject data = JSONObject.fromObject(json.toString());
					jta.append("用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值