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

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

}

}

就是随便输出昵称

数字的:

相关推荐
JAVA学习通1 小时前
北京明光云振铎数据科技Java面经
java·开发语言·科技
贫民窟的勇敢爷们7 小时前
SpringBoot整合AOP切面编程实战,实现日志统一记录+接口权限校验
java·spring boot·spring
jerryinwuhan7 小时前
基于各城市站点流量的复合功能比较
开发语言·php
AC赳赳老秦8 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
迈巴赫车主8 小时前
Java基础:list、set、map一遍过
java·开发语言
灵犀学长9 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
南 阳9 小时前
Python从入门到精通day66
开发语言·python
好家伙VCC10 小时前
【无标题】
java
十八旬10 小时前
快速安装ClaudeCode完整指南
开发语言·windows·python·claude
前进的李工11 小时前
EXPLAIN输出格式全解析:JSON、TREE与可视化
开发语言·数据库·mysql·性能优化·explain