一个利用Socket做的聊天室小例子

来源:互联网 发布:centos 7 取消待机 编辑:程序博客网 时间:2024/04/27 20:17
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(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubwriter.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 stubClient 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();}}}}

原创粉丝点击