zoukankan      html  css  js  c++  java
  • java_socket套接字网络编程_实现多线程聊天

    java编程_socket_套接字_网络编程_简易的GUI多线程聊天程序

    运行效果:

    ===============================================================

    服务器端代码:

    复制代码
      1 package com.b510.socket1706.gui.freeechatroom;
      2 
      3 import java.io.*;
      4 import java.net.*;
      5 import java.awt.*;
      6 import java.awt.event.*;
      7 
      8 /**
      9  * 服务器端程序
     10  * 
     11  * @author Hongten
     12  * 
     13  * @time 2012-4-29 2012
     14  */
     15 public class TestServer {
     16     private ServerSocket ss;
     17     private Socket s;
     18     private DataInputStream dis;
     19     private DataOutputStream dos;
     20     private TextArea ta;
     21     private TextField tf;
     22 
     23     public static void main(String args[]) {
     24         TestServer ts = new TestServer();
     25         ts.createUI();
     26         ts.connect();
     27         ts.createThread();
     28     }
     29 
     30     public void connect() {
     31         try {
     32             ss = new ServerSocket(8888);
     33             s = ss.accept();
     34             dis = new DataInputStream(s.getInputStream());
     35             dos = new DataOutputStream(s.getOutputStream());
     36         } catch (IOException e) {
     37             e.printStackTrace();
     38             // 13701303436
     39 
     40         }
     41     }
     42 
     43     public void createUI() {
     44         Frame f = new Frame("Server");
     45         ta = new TextArea();
     46         tf = new TextField();
     47         Button send = new Button("send");
     48         Panel p = new Panel();
     49         p.setLayout(new BorderLayout());
     50         p.add(tf, "Center");
     51         p.add(send, "East");
     52         f.add(ta, "Center");
     53         f.add(p, "South");
     54         MyServerListener listener = new MyServerListener(this);
     55         send.addActionListener(listener);
     56         tf.addActionListener(listener);
     57         f.addWindowListener(new WindowAdapter() {
     58             public void windowClosing(WindowEvent e) {
     59                 System.exit(0);
     60             }
     61         });
     62         f.setSize(400, 400);
     63         f.setVisible(true);
     64     }
     65 
     66     public void createThread() {
     67         MyServerReader reader = new MyServerReader(this);
     68         reader.start();
     69     }
     70 
     71     public void close() {
     72         try {
     73             dis.close();
     74             dos.close();
     75             s.close();
     76             ss.close();
     77         } catch (IOException e) {
     78             e.printStackTrace();
     79         }
     80     }
     81 
     82     public DataInputStream getDataInputStream() {
     83         return dis;
     84     }
     85 
     86     public DataOutputStream getDataOutputStream() {
     87         return dos;
     88     }
     89 
     90     public TextArea getTextArea() {
     91         return ta;
     92     }
     93 
     94     public TextField getTextField() {
     95         return tf;
     96     }
     97 }
     98 
     99 class MyServerListener implements ActionListener {
    100     private TestServer server;
    101 
    102     public MyServerListener(TestServer server) {
    103         this.server = server;
    104     }
    105 
    106     public void actionPerformed(ActionEvent e) {
    107         TextField tf = server.getTextField();
    108         String info = tf.getText();
    109         server.getTextArea().append("自己说: " + info + "\n");
    110         try {
    111             server.getDataOutputStream().writeUTF(info);
    112         } catch (IOException e1) {
    113             e1.printStackTrace();
    114         }
    115         if (info.equals("bye")) {
    116             server.close();
    117             System.exit(0);
    118         }
    119         tf.setText("");
    120         tf.requestFocus();
    121     }
    122 }
    123 
    124 class MyServerReader extends Thread {
    125     private TestServer server;
    126 
    127     public MyServerReader(TestServer server) {
    128         this.server = server;
    129     }
    130 
    131     public void run() {
    132         String info;
    133         DataInputStream dis = server.getDataInputStream();
    134         TextArea ta = server.getTextArea();
    135         try {
    136             while (true) {
    137                 info = dis.readUTF();
    138                 ta.append("对方说: " + info + "\n");
    139                 if (info.equals("bye")) {
    140                     server.close();
    141                     System.exit(0);
    142                 }
    143             }
    144         } catch (IOException e) {
    145             e.printStackTrace();
    146         }
    147     }
    148 }
    复制代码

    客户端代码:

    复制代码
      1 package com.b510.socket1706.gui.freeechatroom;
      2 
      3 import java.io.*;
      4 import java.net.*;
      5 import java.awt.*;
      6 import java.awt.event.*;
      7 /**
      8  * 客户端程序
      9  * @author Hongten
     10  *
     11  * @time 2012-4-29  2012
     12  */
     13 public class TestClient {
     14     private Socket s;
     15     private DataInputStream dis;
     16     private DataOutputStream dos;
     17     private TextArea ta;
     18     private TextField tf;
     19 
     20     public static void main(String args[]) {
     21         TestClient tc = new TestClient();
     22         tc.createUI();
     23         tc.connect();
     24         tc.createThread();
     25     }
     26 
     27     public void connect() {
     28         try {
     29             s = new Socket("127.0.0.1", 8888);
     30             dos = new DataOutputStream(s.getOutputStream());
     31             dis = new DataInputStream(s.getInputStream());
     32         } catch (IOException e) {
     33             e.printStackTrace();
     34         }
     35     }
     36 
     37     public void createUI() {
     38         Frame f = new Frame("Client");
     39         ta = new TextArea();
     40         tf = new TextField();
     41         Button send = new Button("send");
     42         Panel p = new Panel();
     43         p.setLayout(new BorderLayout());
     44         p.add(tf, "Center");
     45         p.add(send, "East");
     46         f.add(ta, "Center");
     47         f.add(p, "South");
     48         MyClientListener listener = new MyClientListener(this);
     49         send.addActionListener(listener);
     50         tf.addActionListener(listener);
     51         f.addWindowListener(new WindowAdapter() {
     52             public void windowClosing(WindowEvent e) {
     53                 System.exit(0);
     54             }
     55         });
     56         f.setSize(400, 400);
     57         f.setLocation(600, 0);
     58         f.setVisible(true);
     59     }
     60 
     61     public void createThread() {
     62         MyClientReader reader = new MyClientReader(this);
     63         reader.start();
     64     }
     65 
     66     public void close() {
     67         try {
     68             dis.close();
     69             dos.close();
     70             s.close();
     71         } catch (IOException e) {
     72             e.printStackTrace();
     73         }
     74     }
     75 
     76     public DataInputStream getDataInputStream() {
     77         return dis;
     78     }
     79 
     80     public DataOutputStream getDataOutputStream() {
     81         return dos;
     82     }
     83 
     84     public TextArea getTextArea() {
     85         return ta;
     86     }
     87 
     88     public TextField getTextField() {
     89         return tf;
     90     }
     91 }
     92 
     93 class MyClientListener implements ActionListener {
     94 
     95     private TestClient client;
     96 
     97     public MyClientListener(TestClient client) {
     98         this.client = client;
     99     }
    100 
    101     public void actionPerformed(ActionEvent e) {
    102         TextField tf = client.getTextField();
    103         String info = tf.getText();
    104         client.getTextArea().append("自己说: " + info + "\n");
    105         try {
    106             client.getDataOutputStream().writeUTF(info);
    107         } catch (IOException e1) {
    108             e1.printStackTrace();
    109         }
    110         if (info.equals("bye")) {
    111             client.close();
    112             System.exit(0);
    113         }
    114         tf.setText("");
    115         tf.requestFocus();
    116     }
    117 }
    118 
    119 class MyClientReader extends Thread {
    120     private TestClient client;
    121 
    122     public MyClientReader(TestClient client) {
    123         this.client = client;
    124     }
    125 
    126     public void run() {
    127         String info;
    128         DataInputStream dis = client.getDataInputStream();
    129         TextArea ta = client.getTextArea();
    130         try {
    131             while (true) {
    132                 info = dis.readUTF();
    133                 ta.append("对方说: " + info + "\n");
    134                 if (info.equals("bye")) {
    135                     client.close();
    136                     System.exit(0);
    137                 }
    138             }
    139         } catch (IOException e) {
    140             e.printStackTrace();
    141         }
    142     }
    143 }
  • 相关阅读:
    说一下Mysql索引
    B树、B-树、B+树、B*树之间的关系
    Mybatis Plus 的优点
    JVM垃圾回收机制
    Java中的集合
    MQ 面试题
    Redis 双写一致性
    Redis 主从复制
    C#中Abstract和Virtual的区别
    C#设计模式(2)——简单工厂模式
  • 原文地址:https://www.cnblogs.com/zyn1990/p/4024836.html
Copyright © 2011-2022 走看看