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

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

}

}

就是随便输出昵称

数字的:

相关推荐
没差c5 分钟前
springboot集成flyway
java·spring boot·后端
无小道11 分钟前
Qt——QWidget
开发语言·qt
时艰.16 分钟前
Java 并发编程之 CAS 与 Atomic 原子操作类
java·开发语言
梵刹古音43 分钟前
【C语言】 函数基础与定义
c语言·开发语言·算法
编程彩机1 小时前
互联网大厂Java面试:从Java SE到大数据场景的技术深度解析
java·大数据·spring boot·面试·spark·java se·互联网大厂
笨蛋不要掉眼泪1 小时前
Spring Boot集成LangChain4j:与大模型对话的极速入门
java·人工智能·后端·spring·langchain
梵刹古音1 小时前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
Yvonne爱编码1 小时前
JAVA数据结构 DAY3-List接口
java·开发语言·windows·python
一方_self1 小时前
了解和使用python的click命令行cli工具
开发语言·python
南宫码农1 小时前
我的电视 - Android原生电视直播软件 完整使用教程
android·开发语言·windows·电视盒子