java简易多用户聊天室
来源:互联网 发布:paxos算法 应用 编辑:程序博客网 时间:2024/05/01 10:44
java Swing写的一个小Demo
Server
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class Server { static Boolean start = true; List<Client> clients = new ArrayList<Client>(); public static void main(String[] args) { new Server().start(); } public void start() { Socket s = null; ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8888); while (start) { s = serverSocket.accept(); Client client = new Client(s); new Thread(client).start(); clients.add(client); } } catch (IOException e) { e.printStackTrace(); } finally { if (serverSocket != null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } class Client implements Runnable { private Socket socket; private BufferedReader br; private PrintWriter pWriter; private String mes; public Client(Socket socket) { this.socket = socket; try { this.br = new BufferedReader(new InputStreamReader( socket.getInputStream())); this.pWriter = new PrintWriter(socket.getOutputStream(),true); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try{ while (start) { while((mes=br.readLine())!=null){ System.out.println(mes); for (int i = 0; i < clients.size(); i++) { if(!this.equals(clients.get(i))) clients.get(i).pWriter.println(mes); } } } }catch(Exception e){ e.printStackTrace(); }finally{ try { if (br!=null) { br.close(); } if(socket!=null){ socket.close(); } if(this!=null){ clients.remove(this); } } catch (IOException e) { e.printStackTrace(); } } } }}
Client
import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JTextArea;import javax.swing.JLabel;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;public class ChatClient extends JFrame { JTextArea textArea; Socket socket; OutputStream oStream; PrintWriter pWriter; private JTextField textField; private boolean start; private BufferedReader bReader; public ChatClient() { getContentPane().setLayout(null); textArea = new JTextArea(); textArea.setEditable(false); textArea.setBounds(10, 58, 414, 309); getContentPane().add(textArea); textField = new JTextField(); textField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_ENTER) { String string = textField.getText(); if (!string.equals("")) { textArea.append(string + "\n"); textField.setText(""); pWriter.println(string); } } } }); textField.setBounds(10, 377, 414, 21); getContentPane().add(textField); textField.setColumns(10); JLabel userName = new JLabel("userName"); userName.setBounds(34, 33, 61, 15); getContentPane().add(userName); this.setSize(452, 446); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); disconnect(); System.exit(0); } }); new Thread() { String mesString; boolean start = true; @Override public void run() { try { connect(); while (start) { while ((mesString = bReader.readLine()) != null) { textArea.append(mesString + "\n"); } } } catch (SocketException e1) { } catch (IOException e) { e.printStackTrace(); } }; }.start(); } public void connect() { try { socket = new Socket("127.0.0.1", 8888); oStream = socket.getOutputStream(); pWriter = new PrintWriter(oStream, true); bReader = new BufferedReader(new InputStreamReader( socket.getInputStream())); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void disconnect() { try { if (pWriter != null) { pWriter.close(); } if (bReader != null) { bReader.close(); } if (socket != null) { socket.close(); } } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new ChatClient(); }}
0 0
- java简易多用户聊天室
- Java简易聊天室
- JAVA--简易聊天室程序
- java socket简易聊天室
- java简易聊天室
- 多线程Java简易聊天室
- Java Socket编程(模拟多用户聊天室)
- Java简易聊天室程序socket
- Java、WebSocket、HTML简易聊天室
- Java简易多用户聊天程序项目经历
- 简易聊天室
- 一个简易的java聊天室代码
- 基于 Java 和 jQuery 的简易聊天室
- JAVA EE简易聊天室实验报告
- Java WebSocket编程与网页简易聊天室
- java菜鸟 socket简易局域网聊天室
- Java画面精美的简易聊天室
- Java 简易C/S结构多线程聊天室 (阻塞式)
- 用例与参与者
- Cognos tree prompt automatic search function
- 管道
- 初始化列表使用情况
- Java 集合框架Example-Set
- java简易多用户聊天室
- idea2016 修改jsp页面需要重新部署项目的问题
- 取出字符串中的数字求和(c语言)
- poj3237 Tree
- HBase管理 HBase数据备份方式对比
- 快速排序
- SonarQube程序系统质量管理平台介绍与使用
- 第二周 项目0-宣告主权
- 优化php效率,提高php性能的一些方法