import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
public class Client extends Frame implements Runnable
{
private TextField nameBox=new TextField("<姓名>");
private TextArea msgView=new TextArea();
private TextField sendBox=new TextField();
private BufferedReader reader;
private PrintWriter writer;
private Socket socket;
public Client(String title)
{
super(title);
msgView.setEditable(false);
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){
}
}
}
private void connect()
{
try{
msgView.append("和服務(wù)器套接字連接\n");
socket=new Socket("127.0.0.1",2554);
msgView.append("聊天就緒\n");
reader=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(),true);
new Thread(this).start();
}catch(Exception e){
msgView.append("連接失敗");
}
}
public static void main(String[] args)
{
Client client=new Client("聊天");
client.setVisible(true);
client.connect();
}
}
import java.net.*;
import java.io.*;
import java.util.*;
public class Server
{
private ServerSocket server;
private BManager bMan=new BManager();
public Server(){};
void startServer()
{
try
{
server=new ServerSocket(2554);
System.out.println("服務(wù)器套接字創(chuàng)建完畢");
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)
{
Server server=new Server();
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("客戶機(jī)離開");
bMan.sendClientInfo();
}catch(Exception e){}
}
}
}
class BManager extends Vector
{
BManager(){}
void add(Socket sock)
{
super.add(sock);
}
void remove(Socket sock)
{
super.remove(sock);
}
synchronized void sendToAll(String msg)
{
PrintWriter writer=null;
Socket sock;
for(int i=0;i<size();i++)
{
sock=(Socket)elementAt(i);
try
{
writer=new PrintWriter(sock.getOutputStream(),true);
}catch(IOException ie){}
if(writer!=null)writer.println(msg);
}
}
synchronized void sendClientInfo()
{
String info="當(dāng)前在線人數(shù):"+size();
System.out.println(info);
sendToAll(info);
}
}
}
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。