聊天程序服務器端
Server5.java
import?java.net.*;
import?java.io.*;
import?java.util.*;


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

????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)
{

}finally
{

????try
{
?????????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)
{}
????}
?}
}

class?BManager?extends?Vector
{

????BManager()
{}

????void?add(Socket?socket)
{
????????super.add(socket);
????}

????void?remove(Socket?socket)
{
????????super.remove(socket);
????}
????

????synchronized?void?sendToAll(String?msg)
{
????????PrintWriter?writer=null;
????????Socket?socket;

????????for(int?i=0;i<size();i++)
{
????????
????????socket=(Socket)elementAt(i);

????????try
{
????????????writer=new?PrintWriter(socket.getOutputStream(),true);

????????}catch(IOException?e)
{}
????????if(writer!=null)?writer.println(msg);
????}
??}????

??????synchronized?void?sendClientInfo()
{
??????????String?info="當前聊天人數"+size();
??????????System.out.println(info);
??????????sendToAll(info);
???????}
?}
}聊天程序客戶端:
Client5.java
import?java.awt.*;
import?java.awt.event.*;
import?java.net.*;
import?java.io.*;


public?class?Client5?extends?Frame?implements?Runnable
{
????private?TextField?nameBox=new?TextField("<名字>");//顯示客戶端名字,可以改.
????private?TextField?sendBox=new?TextField();
????private?TextArea?msgView=new?TextArea();
????private?BufferedReader?reader;
????private?PrintWriter?writer;
????private?Socket?socket;
????

????public?Client5(String?title)?
{
????????super(title);
????????add(nameBox,"North");
????????add(msgView,"Center");
????????add(sendBox,"South");

????????sendBox.addActionListener(new?ActionListener()
{

????????????public?void?actionPerformed(ActionEvent?ae)
{

????????????????try
{
????????????????????writer.println(nameBox.getText()+":"+sendBox.getText());
????????????????????sendBox.setText("");

????????????????}catch(Exception?ie)
{}
????????????}
????????});
????????pack();
????}

????public?void?run()
{

????????while(true)
{

????????????try
{
????????????????msgView.append(reader.readLine()+"\n");

????????????}catch(IOException?ie)
{}
????????????
????????}
????}

????public?void?connect()
{

????????try
{
????????????msgView.append("嘗試與服務器連接\n");
????????????socket=new?Socket("192.168.1.22",7777);
????????????msgView.append("聊天準備完畢\n");
????????????reader=new?BufferedReader(new?InputStreamReader(socket.getInputStream()));
????????????writer=new?PrintWriter(socket.getOutputStream(),true);
????????????new?Thread(this).start();

????????}catch(Exception?e)
{
????????????System.out.println("連接失敗");
????????????}
????}

????public?static?void?main(String[]?args)?
{
???????Client5??client=new?Client5("聊天");
???????client.setVisible(true);
???????client.connect();
????}
}

注意:客戶端有多個,可復制,粘貼客戶端程序.但是要把名字和最上面的文本框的名字改了.