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

2014-11-24 07:51:04 · 作者: · 浏览: 4
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 {
9