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

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();

}

}

就是随便输出昵称

数字的:

相关推荐
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ2 分钟前
${project.basedir}延申出来的Maven内置的一些常用属性
java·pycharm·maven
花落人散处9 分钟前
SpringAI —— 接入DeepSeek
java·后端
XU磊26024 分钟前
手动实现 Tomcat 核心机制:打造属于自己的 Servlet 容器
java·servlet·tomcat
R-sz43 分钟前
java内存缓存实现 与 redis缓存实现 (ConcurrentHashMap 应用)
java·redis·缓存
Seven971 小时前
剑指offer-10、矩阵覆盖
java
Seven971 小时前
剑指offer-9-变态跳台阶
java
程序员小白条1 小时前
我的第二份实习,学校附近,但是干前端!
java·开发语言·前端·数据结构·算法·职场和发展
钟琛......1 小时前
java中父类和子类的成员变量可以重名吗
java·开发语言
沐知全栈开发2 小时前
PHP 超级全局变量
开发语言
Deng9452013145 小时前
基于Python的职位画像系统设计与实现
开发语言·python·文本分析·自然语言处理nlp·scrapy框架·gensim应用