Client.java文件
import java.net.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class Client extends JFrame implements Runnable{
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel jpanel=new JPanel();
private JLabel nameLabel=new JLabel("姓名:");
private JTextField nameField=new JTextField();
private JTextArea msgArea=new JTextArea();
private JTextField sendField=new JTextField();
private JScrollPane jScrollPanel=new JScrollPane();
private BufferedReader reader;
private PrintWriter writer;
private Socket socket;
public Client(String title)
{
super(title);
this.setSize(360, 340);
this.add(jpanel);
jpanel.setLayout(null);
msgArea.setEnabled(false);
jpanel.add(nameLabel);
nameLabel.setBounds(10, 10, 60, 20);
jpanel.add(nameField);
nameField.setBounds(60, 10, 270, 21);
jpanel.add(sendField);
sendField.setBounds(10, 270, 320, 21);
msgArea.setColumns(20);
msgArea.setRows(5);
jScrollPanel.setViewportView(msgArea);
jpanel.add(jScrollPanel);
jScrollPanel.setBounds(10, 40, 320, 220);
sendField.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
writer.println(nameField.getText()+":"+sendField.getText());;
sendField.setText("");
}
});
}
/**
* @param args
*/
public void run()
{
while(true){
try
{
msgArea.append(reader.readLine()+"\n");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
void getSocket()
{
msgArea.append("尝试与服务器链接");
try
{
socket =new Socket("127.0.0.1",9999);
msgArea.append("聊天准备完毕");
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer=new PrintWriter(socket.getOutputStream(),true);
new Thread(this).start();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Client client=new Client("聊天屋");
client.setVisible(true);
client.getSocket();
}
}
ServerProcess.java文件
import java.net.*;
import java.io.*;
public class ServerProcess {
private SocketManager socketMan=new SocketManager();
void getServer(){
try
{
ServerSocket serverSocket=new ServerSocket(9999);
System.out.println("服务器套接字已创建");
while(true)
{
Socket socket=serverSocket.accept();
new write_Thread(socket).start();
socketMan.add(socket);
socketMan.sendClientCount();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
class write_Thread extends Thread{
Socket socket=null;
private BufferedReader reader;
private PrintWriter writer;
public write_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);
socketMan.writeAll(msg);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
public static void main(String[] arg)
{
ServerProcess server=new ServerProcess();
server.getServer();
}
}
SocketManager.java文件
import java.util.*;
import java.net.*;
import java.io.*;
public class SocketManager extends ArrayList {
/**
*
*/
private static final long serialVersionUID = 1L;
synchronized void add(Socket socket) //添加链接套接字方法
{
super.add(socket);
}
synchronized void delete(Socket socket) //删除套接字方法
{
super.remove(socket);
}
synchronized void sendClientCount() //输出当前聊天人数
{
String info="当前聊天人数"+size();
System.out.println(info);
writeAll(info);
}
synchronized void writeAll(String str) //使用套接字输出流输出信息
{
PrintWriter write=null;
Socket socket;
for(int i=0;i<size();i++)
{
socket=(Socket)get(i);
try
{
write =new PrintWriter(socket.getOutputStream(),true);
if(write!=null)
write.println(str);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}