- 浏览: 821869 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
Java Socket 编程——多线程网络聊天程序
首先,进行服务端的编程,作为服务端,编程主要按下面几个步骤进行:
// 1. 创建socket
ServerSocket ss = new ServerSocket(PortNumber);
Socket s = ss.accept(); //监听器,产生阻塞,直到有连接才停止阻塞。
// 2. 打开输入流、输出流
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
InputStream is = s.getInputStream();
// 3. 根据一定的协议读写数据
// 服务器 --> 客户
//os.write("Hello,I am Server!".getBytes());
bos.write("Hello,I am Server!".getBytes());
bos.flush(); //注意!!
// 服务器 <-- 客户
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
// 4. 关系流和Socket
//os.close();
bos.close();
is.close();
s.close();
ss.close();
作为客户端则分为下面几个步骤,其实和服务端差不多,只是少了用ServerSocket进行监听。
// 1. 创建socket
Socket s = new Socket(InetAddress.getByName("localhost"),
PortNumber);
// 2. 打开输入流、输出流
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
// 3. 根据一定的协议读写数据
// 服务器 --> 客户
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
// 服务器 <-- 客户
os.write("Hello,I am Client!".getBytes());
// 4. 关系流和Socket
os.close();
is.close();
s.close();
上面这些只是一个单线程的服务端->客户端的程序,只能进行一次通讯,多次通讯将被告知无法连接。
这时,我们就需要用到进程Thread进行编程,将其改造成多线程聊天程序,可以同时进行多客户端的连接与发送信息。
代码如下:
1 //Server.java
2
3 import java.awt.*;
4 import java.net.*;
5 import java.io.*;
6
7 public class Server extends Thread {
8 ServerSocket skt;
9
10 Socket Client[]=new Socket[10];;
11 Socket Client1=null;
12
13 int i = 0;
14
15 TextArea in;
16
17 int port,k=0,l=0;
18
19 //BufferedReader theInputStream;
20
21 PrintStream theOutputStream;
22
23 //String readin;
24
25 Face chat;
26
27 public Server(int port, Face chat) {
28 try {
29 this.port = port;
30 skt = new ServerSocket(port);
31 this.chat = chat;
32 } catch (IOException e) {
33 chat.ta.append(e.toString());
34 }
35 }
36
37 public void run() {
38
39 chat.ta.append("等待连线");
40
41 while (true) {
42 //System.out.print(""+i+"\n");
43 try {
44
45
46 Client[k] = skt.accept(); /**//* 接收客户连接 */
47
48 //当有客户端连接时就新建一个子线程
49
50
51 if (i < 2) {
52 ServerThread server[] = new ServerThread[10];
53 server[k]= new ServerThread(Client[k], this.chat, i);
54 l=server.length;
55 server[k].start();
56 chat.ta.append("客户端" + Client[k].getInetAddress() + "已连线\n");
57 /**//*theInputStream = new BufferedReader(new InputStreamReader(Client
58 .getInputStream()));*/
59 //for(int j=0;j<server.length;j++)
60 theOutputStream = new PrintStream(server[k].getClient().getOutputStream());
61 i = server[k].getI();
62 k++;
63 } else {
64 //theOutputStream = new PrintStream(null);
65 }
66
67 } catch (SocketException e) {
68 //chat.ta.append("连线中断!\n");
69
70 //chat.clientBtn.setEnabled(true);
71 //chat.serverBtn.setEnabled(true);
72 //chat.tfaddress.setEnabled(true);
73 //chat.tfport.setEnabled(true);
74 //try {
75
76 //skt.close();
77 //Client.close();
78 //} catch (IOException err) {
79 // chat.ta.append(err.toString());
80 //}
81 } catch (IOException e) {
82 chat.ta.append(e.toString());
83 }
84 }
85
86 }
87
88 public void dataout(String data) {
89 //for(int j=0;j<l;j++)
90 theOutputStream.println(data);
91 }
92 }
93
94 class ServerThread extends Thread {
95 ServerSocket skt;
96
97 Socket Client;
98
99 TextArea in;
100
101 int port;
102
103 int i;
104
105 BufferedReader theInputStream;
106
107 PrintStream theOutputStream;
108
109 String readin;
110
111 Face chat;
112
113//服务端子线程
114
115 public ServerThread(Socket s, Face chat, int i) {
116 this.i = ++i;
117 Client = s;
118 //this.port = port;
119 //skt = new ServerSocket(port);
120 this.chat = chat;
121
122 }
123
124 public int getI() {
125 return this.i;
126 }
127 public Socket getClient() {
128 return this.Client;
129 }
130 public void run() {
131
132 //chat.ta.append("等待连线");
133
134 try {
135 //Client = skt.accept(); /* 接收客户连接 */
136
137 //chat.ta.append("客户端" + Client.getInetAddress() + "已连线\n");
138 theInputStream = new BufferedReader(new InputStreamReader(Client
139 .getInputStream()));
140 theOutputStream = new PrintStream(Client.getOutputStream());
141
142 while (true) {
143 readin = theInputStream.readLine();
144 chat.ta.append(readin + "\n");
145 }
146
147 } catch (SocketException e) {
148 chat.ta.append("连线中断!\n");
149
150 chat.clientBtn.setEnabled(true);
151 chat.serverBtn.setEnabled(true);
152 chat.tfaddress.setEnabled(true);
153 chat.tfport.setEnabled(true);
154 try {
155 i--;
156 skt.close();
157 Client.close();
158 } catch (IOException err) {
159 chat.ta.append(err.toString());
160 }
161 } catch (IOException e) {
162 chat.ta.append(e.toString());
163 }
164 }
165
166 public void dataout(String data) {
167 theOutputStream.println(data);
168 }
169 }
170
171 //Client.java
172
173 import java.net.*;
174 import java.io.*;
175 import javax.swing.Timer;
176 class Client extends Thread {
177 Socket skt;
178 InetAddress host;
179 int port;
180
181 BufferedReader theInputStream;
182 PrintStream theOutputStream;
183 String readin;
184
185 Face chat;
186
187 public Client(String ip, int p, Face chat) {
188 try {
189 host = InetAddress.getByName(ip);
190 port = p;
191 this.chat = chat;
192 } catch (IOException e) {
193 chat.ta.append(e.toString());
194 }
195 }
196
197 public void run() {
198 try {
199 chat.ta.append("尝试连线");
200
201 skt = new Socket(host, port);
202 chat.ta.append("连线成功\n");
203
204 theInputStream = new BufferedReader(new InputStreamReader(skt
205 .getInputStream()));
206
207 theOutputStream = new PrintStream(skt.getOutputStream());
208 //Timer myTimer = new Timer();
209 while (true) {
210 readin = theInputStream.readLine();
211 chat.ta.append(readin + "\n");
212 }
213 } catch (SocketException e) {
214 chat.ta.append("连线中断!\n");
215 chat.clientBtn.setEnabled(true);
216 chat.serverBtn.setEnabled(true);
217 chat.tfaddress.setEnabled(true);
218 chat.tfport.setEnabled(true);
219 try {
220 skt.close();
221 } catch (IOException err) {
222 chat.ta.append(err.toString());
223 }
224 } catch (IOException e) {
225 chat.ta.append(e.toString());
226 }
227 }
228
229 public void dataout(String data) {
230 theOutputStream.println(data);
231 }
232 }
233
234//软件界面,进行按键监听调用。
235 //face.java
236
237 import java.awt.*;
238 import java.awt.event.*;
239
240 public class Face extends Frame {
241 /** *//**
242 *
243 */
244 private static final long serialVersionUID = 1L;
245 Button clientBtn, serverBtn;
246 TextArea ta;
247 TextField tfaddress, tfport, tftype;
248 int port;
249 Client client;
250 Server server;
251 boolean iamserver;
252 static Face frm;
253
254 public Face() {
255 clientBtn = new Button("客户端");
256 serverBtn = new Button("服务器");
257 ta = new TextArea("", 10, 50, TextArea.SCROLLBARS_BOTH);
258 tfaddress = new TextField("192.168.1.104", 20);
259 tfport = new TextField("2000");
260 tftype = new TextField(50);
261
262 tftype.addKeyListener(new TFListener());
263 ta.setEditable(false);
264
265 setLayout(new FlowLayout());
266 add(tfaddress);
267 add(tfport);
268 add(clientBtn);
269 add(serverBtn);
270 add(ta);
271 add(tftype);
272 setSize(400, 300);
273 setTitle("我的聊天室");
274 this.setVisible(true);
275
276 clientBtn.addActionListener(new ActionListener() {
277 public void actionPerformed(ActionEvent e) {
278
279 port = Integer.parseInt(tfport.getText());
280
281 client = new Client(tfaddress.getText(), port, frm);
282
283 client.start();
284
285 tfaddress.setEnabled(false);
286 tfport.setEnabled(false);
287 serverBtn.setEnabled(false);
288 clientBtn.setEnabled(false);
289 }
290 });
291
292 serverBtn.addActionListener(new ActionListener() {
293 public void actionPerformed(ActionEvent e) {
294
295 port = Integer.parseInt(tfport.getText());
296
297 server = new Server(port, frm);
298
299 server.start();
300
301 iamserver = true;
302 tfaddress.setText("成为服务器");
303
304 tfaddress.setEnabled(false);
305 tfport.setEnabled(false);
306 serverBtn.setEnabled(false);
307 clientBtn.setEnabled(false);
308 }
309 });
310
311 addWindowListener(new WindowAdapter() {
312 public void windowClosing(WindowEvent e) {
313 System.exit(0);
314 }
315 });
316
317 }
318
319 public static void main(String args[]) {
320 frm = new Face();
321 }
322
323 private class TFListener implements KeyListener {
324 public void keyPressed(KeyEvent e) {
325
326 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
327
328 ta.append(">" + tftype.getText() + "\n");
329
330 if (iamserver)
331 server.dataout(tftype.getText());
332 else
333 client.dataout(tftype.getText());
334
335 tftype.setText("");
336 }
337 }
338
339 public void keyTyped(KeyEvent e) {
340 }
341
342 public void keyReleased(KeyEvent e) {
343 }
344 }
345
}
首先,进行服务端的编程,作为服务端,编程主要按下面几个步骤进行:
// 1. 创建socket
ServerSocket ss = new ServerSocket(PortNumber);
Socket s = ss.accept(); //监听器,产生阻塞,直到有连接才停止阻塞。
// 2. 打开输入流、输出流
OutputStream os = s.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
InputStream is = s.getInputStream();
// 3. 根据一定的协议读写数据
// 服务器 --> 客户
//os.write("Hello,I am Server!".getBytes());
bos.write("Hello,I am Server!".getBytes());
bos.flush(); //注意!!
// 服务器 <-- 客户
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
// 4. 关系流和Socket
//os.close();
bos.close();
is.close();
s.close();
ss.close();
作为客户端则分为下面几个步骤,其实和服务端差不多,只是少了用ServerSocket进行监听。
// 1. 创建socket
Socket s = new Socket(InetAddress.getByName("localhost"),
PortNumber);
// 2. 打开输入流、输出流
OutputStream os = s.getOutputStream();
InputStream is = s.getInputStream();
// 3. 根据一定的协议读写数据
// 服务器 --> 客户
byte[] buf = new byte[100];
int len = is.read(buf);
System.out.println(new String(buf, 0, len));
// 服务器 <-- 客户
os.write("Hello,I am Client!".getBytes());
// 4. 关系流和Socket
os.close();
is.close();
s.close();
上面这些只是一个单线程的服务端->客户端的程序,只能进行一次通讯,多次通讯将被告知无法连接。
这时,我们就需要用到进程Thread进行编程,将其改造成多线程聊天程序,可以同时进行多客户端的连接与发送信息。
代码如下:
1 //Server.java
2
3 import java.awt.*;
4 import java.net.*;
5 import java.io.*;
6
7 public class Server extends Thread {
8 ServerSocket skt;
9
10 Socket Client[]=new Socket[10];;
11 Socket Client1=null;
12
13 int i = 0;
14
15 TextArea in;
16
17 int port,k=0,l=0;
18
19 //BufferedReader theInputStream;
20
21 PrintStream theOutputStream;
22
23 //String readin;
24
25 Face chat;
26
27 public Server(int port, Face chat) {
28 try {
29 this.port = port;
30 skt = new ServerSocket(port);
31 this.chat = chat;
32 } catch (IOException e) {
33 chat.ta.append(e.toString());
34 }
35 }
36
37 public void run() {
38
39 chat.ta.append("等待连线");
40
41 while (true) {
42 //System.out.print(""+i+"\n");
43 try {
44
45
46 Client[k] = skt.accept(); /**//* 接收客户连接 */
47
48 //当有客户端连接时就新建一个子线程
49
50
51 if (i < 2) {
52 ServerThread server[] = new ServerThread[10];
53 server[k]= new ServerThread(Client[k], this.chat, i);
54 l=server.length;
55 server[k].start();
56 chat.ta.append("客户端" + Client[k].getInetAddress() + "已连线\n");
57 /**//*theInputStream = new BufferedReader(new InputStreamReader(Client
58 .getInputStream()));*/
59 //for(int j=0;j<server.length;j++)
60 theOutputStream = new PrintStream(server[k].getClient().getOutputStream());
61 i = server[k].getI();
62 k++;
63 } else {
64 //theOutputStream = new PrintStream(null);
65 }
66
67 } catch (SocketException e) {
68 //chat.ta.append("连线中断!\n");
69
70 //chat.clientBtn.setEnabled(true);
71 //chat.serverBtn.setEnabled(true);
72 //chat.tfaddress.setEnabled(true);
73 //chat.tfport.setEnabled(true);
74 //try {
75
76 //skt.close();
77 //Client.close();
78 //} catch (IOException err) {
79 // chat.ta.append(err.toString());
80 //}
81 } catch (IOException e) {
82 chat.ta.append(e.toString());
83 }
84 }
85
86 }
87
88 public void dataout(String data) {
89 //for(int j=0;j<l;j++)
90 theOutputStream.println(data);
91 }
92 }
93
94 class ServerThread extends Thread {
95 ServerSocket skt;
96
97 Socket Client;
98
99 TextArea in;
100
101 int port;
102
103 int i;
104
105 BufferedReader theInputStream;
106
107 PrintStream theOutputStream;
108
109 String readin;
110
111 Face chat;
112
113//服务端子线程
114
115 public ServerThread(Socket s, Face chat, int i) {
116 this.i = ++i;
117 Client = s;
118 //this.port = port;
119 //skt = new ServerSocket(port);
120 this.chat = chat;
121
122 }
123
124 public int getI() {
125 return this.i;
126 }
127 public Socket getClient() {
128 return this.Client;
129 }
130 public void run() {
131
132 //chat.ta.append("等待连线");
133
134 try {
135 //Client = skt.accept(); /* 接收客户连接 */
136
137 //chat.ta.append("客户端" + Client.getInetAddress() + "已连线\n");
138 theInputStream = new BufferedReader(new InputStreamReader(Client
139 .getInputStream()));
140 theOutputStream = new PrintStream(Client.getOutputStream());
141
142 while (true) {
143 readin = theInputStream.readLine();
144 chat.ta.append(readin + "\n");
145 }
146
147 } catch (SocketException e) {
148 chat.ta.append("连线中断!\n");
149
150 chat.clientBtn.setEnabled(true);
151 chat.serverBtn.setEnabled(true);
152 chat.tfaddress.setEnabled(true);
153 chat.tfport.setEnabled(true);
154 try {
155 i--;
156 skt.close();
157 Client.close();
158 } catch (IOException err) {
159 chat.ta.append(err.toString());
160 }
161 } catch (IOException e) {
162 chat.ta.append(e.toString());
163 }
164 }
165
166 public void dataout(String data) {
167 theOutputStream.println(data);
168 }
169 }
170
171 //Client.java
172
173 import java.net.*;
174 import java.io.*;
175 import javax.swing.Timer;
176 class Client extends Thread {
177 Socket skt;
178 InetAddress host;
179 int port;
180
181 BufferedReader theInputStream;
182 PrintStream theOutputStream;
183 String readin;
184
185 Face chat;
186
187 public Client(String ip, int p, Face chat) {
188 try {
189 host = InetAddress.getByName(ip);
190 port = p;
191 this.chat = chat;
192 } catch (IOException e) {
193 chat.ta.append(e.toString());
194 }
195 }
196
197 public void run() {
198 try {
199 chat.ta.append("尝试连线");
200
201 skt = new Socket(host, port);
202 chat.ta.append("连线成功\n");
203
204 theInputStream = new BufferedReader(new InputStreamReader(skt
205 .getInputStream()));
206
207 theOutputStream = new PrintStream(skt.getOutputStream());
208 //Timer myTimer = new Timer();
209 while (true) {
210 readin = theInputStream.readLine();
211 chat.ta.append(readin + "\n");
212 }
213 } catch (SocketException e) {
214 chat.ta.append("连线中断!\n");
215 chat.clientBtn.setEnabled(true);
216 chat.serverBtn.setEnabled(true);
217 chat.tfaddress.setEnabled(true);
218 chat.tfport.setEnabled(true);
219 try {
220 skt.close();
221 } catch (IOException err) {
222 chat.ta.append(err.toString());
223 }
224 } catch (IOException e) {
225 chat.ta.append(e.toString());
226 }
227 }
228
229 public void dataout(String data) {
230 theOutputStream.println(data);
231 }
232 }
233
234//软件界面,进行按键监听调用。
235 //face.java
236
237 import java.awt.*;
238 import java.awt.event.*;
239
240 public class Face extends Frame {
241 /** *//**
242 *
243 */
244 private static final long serialVersionUID = 1L;
245 Button clientBtn, serverBtn;
246 TextArea ta;
247 TextField tfaddress, tfport, tftype;
248 int port;
249 Client client;
250 Server server;
251 boolean iamserver;
252 static Face frm;
253
254 public Face() {
255 clientBtn = new Button("客户端");
256 serverBtn = new Button("服务器");
257 ta = new TextArea("", 10, 50, TextArea.SCROLLBARS_BOTH);
258 tfaddress = new TextField("192.168.1.104", 20);
259 tfport = new TextField("2000");
260 tftype = new TextField(50);
261
262 tftype.addKeyListener(new TFListener());
263 ta.setEditable(false);
264
265 setLayout(new FlowLayout());
266 add(tfaddress);
267 add(tfport);
268 add(clientBtn);
269 add(serverBtn);
270 add(ta);
271 add(tftype);
272 setSize(400, 300);
273 setTitle("我的聊天室");
274 this.setVisible(true);
275
276 clientBtn.addActionListener(new ActionListener() {
277 public void actionPerformed(ActionEvent e) {
278
279 port = Integer.parseInt(tfport.getText());
280
281 client = new Client(tfaddress.getText(), port, frm);
282
283 client.start();
284
285 tfaddress.setEnabled(false);
286 tfport.setEnabled(false);
287 serverBtn.setEnabled(false);
288 clientBtn.setEnabled(false);
289 }
290 });
291
292 serverBtn.addActionListener(new ActionListener() {
293 public void actionPerformed(ActionEvent e) {
294
295 port = Integer.parseInt(tfport.getText());
296
297 server = new Server(port, frm);
298
299 server.start();
300
301 iamserver = true;
302 tfaddress.setText("成为服务器");
303
304 tfaddress.setEnabled(false);
305 tfport.setEnabled(false);
306 serverBtn.setEnabled(false);
307 clientBtn.setEnabled(false);
308 }
309 });
310
311 addWindowListener(new WindowAdapter() {
312 public void windowClosing(WindowEvent e) {
313 System.exit(0);
314 }
315 });
316
317 }
318
319 public static void main(String args[]) {
320 frm = new Face();
321 }
322
323 private class TFListener implements KeyListener {
324 public void keyPressed(KeyEvent e) {
325
326 if (e.getKeyCode() == KeyEvent.VK_ENTER) {
327
328 ta.append(">" + tftype.getText() + "\n");
329
330 if (iamserver)
331 server.dataout(tftype.getText());
332 else
333 client.dataout(tftype.getText());
334
335 tftype.setText("");
336 }
337 }
338
339 public void keyTyped(KeyEvent e) {
340 }
341
342 public void keyReleased(KeyEvent e) {
343 }
344 }
345
}
发表评论
-
Java多线程-----Socket通信
2010-08-18 17:54 1625Java多线程-----Socket通信 程序分Server ... -
java Socket多线程服务器源代码介绍
2010-08-18 17:49 2110java Socket多线程服务器源代码介绍 ... -
java:多线程与Socket结合的简单示例
2010-08-18 17:47 1234java:多线程与Socket结合 ... -
多线程和Socket结合使用的例子
2010-08-18 17:45 1210多线程Java Socket编程示例 这篇做为学习孙卫琴&l ... -
Java与Socket
2010-08-18 17:44 912Java基于Socket文件传输 ...
相关推荐
总之,"java网络编程——网络版题库程序"是一个综合性的项目,它展示了如何利用Java的Socket编程实现客户端和服务器端的通信,通过多线程提升并发处理能力,并借助MySQL数据库存储和管理大量数据。这个项目对于学习...
【Java练手小项目——多线程...通过这个“Java练手小项目——多线程聊天室”,你可以深入了解Java多线程的原理和实践,同时学习到网络编程和并发集合的运用,这对于提升你的Java编程技能和解决实际问题的能力大有裨益。
- 高并发是聊天程序必须面对的问题,Java的线程模型和并发工具类(如ExecutorService、Semaphore、BlockingQueue等)有助于高效管理多线程。 - 使用线程池可以控制并发量,避免过多的线程创建导致系统资源浪费。 ...
Java课程设计中的“Java聊天室程序源代码”是一项常见的实践项目,旨在帮助学生掌握网络编程、多线程以及用户交互等关键技能。这个程序允许多个用户通过网络连接在一个虚拟空间中进行实时通信,是一个典型的客户端-...
这个项目是针对J2SE平台设计的,主要运用了Java的面向对象编程、网络编程、输入输出流(I/O流)、数据结构和多线程技术。 在需求分析阶段,设计者曾昊明确了系统必须具备的基本功能,如用户能够进行身份的注册与登录...
然而,这只是一个简化的示例,实际的网络编程中可能还需要处理更复杂的情况,如并发连接管理、多线程、流量控制等。对于大规模的文件服务,可能需要使用专门的文件传输协议如FTP或HTTP,或者更高级的框架如NIO(非...
本文将详细介绍Java的多线程技术,并通过一个具体的案例——多用户在线聊天室的开发——展示如何在网络编程中运用这一技术。 #### Java多线程简介 Java中的多线程机制是其一大亮点。所谓线程,是指程序执行中的一个...
Java网络编程是构建分布式应用程序的关键技术,特别是在创建服务器和客户端通信的应用中,如我们的主题——“匿名群聊聊天室”。这个项目涉及了多个客户端通过一个中央服务器进行数据交换,实现在线聊天的功能。在这...
实现这个聊天程序,开发者可能使用了Java的Socket编程。Socket是网络通信的基本组件,提供了双向数据流的端点。在Java中,`java.net.Socket`和`java.net.ServerSocket`类用于创建客户端和服务器端的Socket。 客户端...
在IT行业中,多线程服务器的建立是网络编程的一个重要组成部分,特别是在高并发场景下,如Web服务、游戏服务器等。本文将详细讲解如何初识通信,并以多线程服务器的构建为例,来阐述相关技术点。 首先,理解多线程...
如何实现Socket网络编程的多线程是一个复杂但重要的主题,特别是在构建高效且可扩展的网络应用时。在Java中,Socket编程是通过TCP或UDP协议与远程主机进行通信的基础。这两种协议各有特点,TCP提供可靠的连接,而UDP...
这个项目是一个基于Java编程语言实现的聊天程序,它涵盖了网络通信中的两种主要协议——用户数据报协议(UDP)和传输控制协议(TCP),同时利用了多线程技术来提高程序的并发处理能力。在Java中,网络通信主要依赖于...
在这个项目中,我们将深入探讨Java的Socket编程、多线程以及数据序列化等关键技术。 首先,Java的Socket编程是构建聊天器的基础。Socket是TCP/IP协议的一部分,它允许两个网络应用程序之间建立连接并交换数据。在...
2. **Java网络编程**:聊天室的核心是网络通信,Java提供了Socket编程接口来实现客户端与服务器之间的通信。开发者需要理解TCP/IP协议,熟练运用Socket进行数据传输。 3. **多线程编程**:为了实现多个用户同时在线...
1. **Java网络编程基础**:游戏的基础架构基于Java的Socket编程,Socket是网络通信的基本单元,它允许两个网络应用程序之间建立连接并交换数据。开发者需要理解TCP/IP协议栈,以便利用Java的Socket类实现客户端和...
【网络课程设计——Java聊天程序】 Java聊天程序是一种基于网络通信的应用程序,它允许用户通过互联网进行实时交流。本课程将深入探讨如何使用Java语言来设计这样的系统,分为服务器(Server)和客户端(Client)两...
Java中的Socket编程是网络通信的基础,它允许两个网络应用程序通过TCP/IP协议进行数据交换。在Java中,Socket类和ServerSocket类是实现客户端-服务器通信的核心。本篇将深入探讨这两个类以及它们在创建、连接、发送...
第6章介绍了几个Java的高级应用,包括多线程、网络编程和GUI编程。...网络编程,介绍如何通过HTTP协议访问Web应用,如何通过Socket编程实现C/S结构的应用程序;GUI,介绍如何编写图形用户界面。最后给出了3个综合实例。