2012年4月29日星期日

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

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 }

有关于socket的简单编程基础,大家可以参考:

http://www.cnblogs.com/hongten/archive/2012/04/29/java_socket.html


TAG:socket 套接字 网络编程 java编程 简易的GUI多线程聊天程序