这个程序还有很多不足,自己弄了很久也搞不定,特别是用户列表那一块,老师急着要我们交,没办法咯。请各位出手吧,谢谢
客户端:
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.* ; class Client5 extends JFrame{
private TextField nameBox=new TextField("",10); //显示用户名字
private TextArea msgView=new TextArea("",20,50,3);
private List namelist=new List();
private TextField sendBox=new TextField("",40);
private Label label1=new Label("输入昵称回车:");
private Label label2=new Label("输入聊天内容:");
private Button send=new Button("发送");
private Panel panel1=new Panel();
private Panel panel2=new Panel();
private Panel panel3=new Panel();
private  JScrollPane scrollpanel_1=new JScrollPane(msgView);
private  JScrollPane scrollpanel_2=new JScrollPane(namelist);
private  JSplitPane splitpane=new JSplitPane(
                JSplitPane.HORIZONTAL_SPLIT,true,scrollpanel_1,scrollpanel_2);private BufferedReader reader;
private PrintWriter writer;
private Socket socket;public Client5(String title){
super(title);
msgView.setEditable(false);
msgView.setBackground(Color.WHITE);//添加组件
add(panel1,"North");
add(panel2,"Center");
add(panel3,"South");panel1.add(label1);
panel1.add(nameBox);
panel2.add(splitpane);
panel3.add(label2);
panel3.add(sendBox);
panel3.add(send);//添加动作事件监听器
send.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
  
try{
//发送用户名及消息内容writer.println(nameBox.getText()+"说:"+sendBox.getText());
sendBox.setText(""); //消除sendBox内容
}catch(Exception ie){}
}
});
nameBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
 
try{
//发送用户名及消息内容
writer.println("姓名:"+nameBox.getText());//nameBox.setText(""); //消除sendBox内容
}catch(Exception ie){}
}
});//pack();
   setBounds(0,0,500,300);
    setVisible(true);
    validate();
}
public void run() {
while(true){     try{msgView.append(reader.readLine()+"\n");}catch(IOException ie){}     
     }
    
}private void connect(){try{
msgView.append("尝试与服务器套接字连接\n");
socket=new Socket("127.0.0.1",7777);msgView.append("聊天准备完毕\n");
reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));writer=new PrintWriter(socket.getOutputStream(),true);Thread thread =new Thread();
thread.start();
}catch(Exception e){
msgView.append("连接失败...");
}
    }
public static void main(String[] args){Client5 client=new Client5("聊天室");
client.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
client.setVisible(true);
client.connect();
     }
}
服务器端:
import java.net.*;
import java.io.*;
import java.util.*;class Server5 {
private ServerSocket server;
private BManager bMan=new BManager(); //消息广播者
public Server5(){}
void startServer(){
try{
server=new ServerSocket(7777);System.out.println("服务器套接字创建成功");
while(true){
Socket socket=server.accept();//创建并运行于与客户机通信的线程
new Chat_Thread(socket).start();//向消息广播者列表添加socket
bMan.add(socket);//消息广播者向所有客户机 传送当前连接人数
bMan.sendClientInfo();
}
}catch(Exception e){
System.out.println(e);
}
}
public static void main(String[] args){
Server5 server=new Server5();
server.startServer();
}
//与客户机通信的线程类
class Chat_Thread extends Thread{
Socket socket;
private BufferedReader reader;
private PrintWriter writer;
boolean rd;
Chat_Thread(Socket socket){
this.socket=socket;}
public void run(){
  
try{
reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));writer=new PrintWriter(socket.getOutputStream(),true);String msg;
//从输出流获取消息
while((msg=reader.readLine())!=null){
System.out.println(msg);
//向所有客户机传送消息
bMan.sendToAll(msg);
}
}catch(Exception e){
}
    
    
try{
reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));writer=new PrintWriter(socket.getOutputStream(),true);
String mane;
//从输出流获取消息
while((mane=reader.readLine())!=null){
System.out.println(mane);
//向所有客户机传送消息
bMan.sendToAll(mane);
}
}catch(Exception e){
}finally{
try{
//从消息广播者列表删除socket
bMan.remove(socket);
if(reader!=null)
reader.close();
if(writer!=null)
writer.close();
if(socket!=null)
socket.close();
reader=null;writer=null;socket=null;
System.out.println("客户机离开");
//向所有客户机传送单签连接人数
bMan.sendClientInfo();
}catch(Exception e){}
}
    }
}
//消息广播类,继承Vector类
class BManager extends Vector{
BManager(){}
void add(Socket sock){ //添加套接字
super.add(sock);
}void remove(Socket sock){ //删除套接字
super.remove(sock);
}//向所有的客户机传送msg,同步化方法
synchronized void sendToAll(String msg){
  
PrintWriter writer=null;//输出流
Socket sock; //套接字
for(int i=0;i<size();i++){
sock=(Socket)elementAt(i);//获取第i个套接字
try{
//获取第i个套接字输出流
writer=new PrintWriter(sock.getOutputStream(),true);
}catch(IOException ie){}
if(writer!=null)
writer.println(msg);
}
    }
//向所有客户机发送当前聊天人数
synchronized void sendClientInfo(){
String info="当前聊天的人数"+size();
System.out.println(info);
sendToAll(info);
}
}}