多向通信----多人聊天

package 多人聊天;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.ArrayList;

public class Gserver implements Runnable {

private int Port = 9999;

private ServerSocket SS;

private Socket socket;

private ArrayList clients = new ArrayList(); //保存客户端线程

public Gserver(){

try{

SS = new ServerSocket(Port);

new Thread(this).start();

}catch(Exception ex){

}

}

public void run(){

try{

while(true){

socket = SS.accept();

ChatThread ct = new ChatThread(socket);

clients.add(ct);

ct.start();

}

}catch(Exception ex){

}

}

class ChatThread extends Thread{

private Socket s;

private InputStream is;

private OutputStream os;

private BufferedReader br;

private PrintStream ps;

public ChatThread(Socket socket) throws Exception{

this.s = socket;

is = this.s.getInputStream();

os = this.s.getOutputStream();

br = new BufferedReader(new InputStreamReader(is));

ps = new PrintStream(os);

}

public void run(){

try{

while(true){

String str = br.readLine();

sendMessage(str);

}

}catch (Exception ex){

}

}

public void sendMessage(String str){

for(int i=0; i<clients.size(); i++){

ChatThread ct = (ChatThread)clients.get(i);

ct.ps.println(str);

}

}

}

public static void main(String[] args){

new Gserver();

}

}

客户端

package 多人聊天;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintStream;

import java.net.InetAddress;

import java.net.Socket;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

public class Gclient extends JFrame implements ActionListener, Runnable {

private Socket socket;

private int Port = 9999;

private InetAddress ip;

private String name;

private JTextArea area = new JTextArea("以下是聊天内容:\n");

private JTextField field = new JTextField("");

public Gclient(){

this.setTitle("客户端");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.add(field,BorderLayout.NORTH);

field.addActionListener(this);

this.add(area, BorderLayout.CENTER);

this.setSize(240, 260);

this.setVisible(true);

name = JOptionPane.showInputDialog("输入昵称:");

try{

ip = InetAddress.getByName("Localhost");

socket = new Socket(ip,Port);

JOptionPane.showMessageDialog(this, "连接成功");

this.setTitle("客户端:" + name);

new Thread(this).start();

}catch (Exception ex){

}

}

public void run(){

try{

while(true){

InputStream is = socket.getInputStream();

BufferedReader bf = new BufferedReader(new InputStreamReader(is));

String str = bf.readLine();

area.append(str + '\n');

}

}catch (Exception ex){

}

}

public void actionPerformed(ActionEvent e){

try{

OutputStream os = socket.getOutputStream();

PrintStream ps = new PrintStream(os);

ps.println(name + "说:" + field.getText());

field.setText("");

}catch (Exception ex){

}

}

public static void main(String[] args) {

new Gclient();

}

}

就是随便输出昵称

数字的:

相关推荐
Seven972 分钟前
BIO详解:解锁阻塞IO的使用方式
java
oak隔壁找我10 小时前
JVM常用调优参数
java·后端
蝎子莱莱爱打怪14 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
狼爷16 小时前
Go 没有 override?别硬套继承!用接口+嵌入,写更清爽的“覆盖”逻辑
java·go
小兔崽子去哪了18 小时前
Java 自动化部署
java·后端
ma_king18 小时前
入门 java 和 数据库
java·数据库·后端
后端AI实验室18 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
码路飞1 天前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing1 天前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
Seven971 天前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java