java socket多线程聊天室_java socket多线程聊天室

SERVER

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

import java.util.*;

public class Server extends JFrame implements Runnable,ActionListener{

JPanel jp;

JButton jb,jb2;

ServerSocket ss;

Socket s;

ArrayList al=new ArrayList();

HuThread ht;

JTextArea jta;

JScrollPane jsp;

boolean hufan=true;

public static void main(String[] args) {

new Server();

}

public Server(){

jp=new JPanel();

jb=new JButton("启动服务器");

jb2=new JButton("关闭服务器");

jb.addActionListener(this);

jb2.addActionListener(this);

jta=new JTextArea();

jsp=new JScrollPane(jta);

jp.add(jb);

jp.add(jb2);

this.add(jsp);

this.add(jp,"North");

this.setSize(400, 300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

@Override

public void run() {

while(hufan){

try {

s=ss.accept();

al.add(s);

ht=new HuThread(s,al);

Thread tt=new Thread(ht);

tt.start();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jb){

try {

ss=new ServerSocket(5555);

hufan=true;

jta.setText("服务器已经启动");

Thread t=new Thread(this);

t.start();

} catch (Exception e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

}else if(e.getSource()==jb2){

try {

hufan=false;

ss.close();

} catch (IOException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

jta.setText("服务器已经关闭");

}

}

}

class HuThread implements Runnable{

Socket s;

ArrayList al;

public HuThread(Socket s,ArrayList al){

this.s=s;

this.al=al;

}

public void run() {

try{

BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));

while(true){

String info=br.readLine();

for(int i=0;i

Socket s2=(Socket)al.get(i);

PrintWriter pw=new PrintWriter(s2.getOutputStream());

pw.println(info);

pw.flush();

}

}

}catch(Exception e){

e.printStackTrace();

}

}

}

CLIENT

import java.awt.event.*;

import java.io.*;

import java.net.*;

import javax.swing.*;

public class Client extends JFrame implements ActionListener,Runnable{

JTextArea jta;

JTextField jtf;

JPanel jp;

JButton jb;

BufferedReader in;

PrintWriter out;

JScrollPane jsp;

public static void main(String args[]){

Client c = new Client();

// c.receive();

}

public Client(){

jp=new JPanel();

jta=new JTextArea();

jta.setEditable(false);

jsp=new JScrollPane(jta);

jb=new JButton("发送");

jb.addActionListener(this);

jtf=new JTextField(20);

jp.add(jtf);

jp.add(jb);

this.add(jsp,"Center");

this.add(jp,"South");

try {

Socket s = new Socket("127.0.0.1",5555);

System.out.println("客户连接服务器成功");

out = new PrintWriter(s.getOutputStream());

in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流

} catch (Exception e) {

e.printStackTrace();

}

Thread t=new Thread(this);

t.start();

this.setSize(400,300);

this.setLocation(400, 300);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

//消息接收

// private void receive(){

// try {

// while(true){

// String str = in.readLine();//读BufferedReader

// if(str==null){

// return ;

// }

// jta.append("说"+str+"\r\n");//加载到JTextArea中,显示

// }

// } catch (IOException e) {

// e.printStackTrace();

// }

// }

@Override

public void actionPerformed(ActionEvent arg0) {

String text=jtf.getText();

jtf.setText("");

out.println(text);

out.flush();

}

@Override

public void run() {

try {

while (true) {

String str = in.readLine();

if (str != null) {

jta.append("说" + str + "\r\n");

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值