java编程_socket_套接字_网络编程 (五)

2014-11-24 07:51:05 · 作者: · 浏览: 3
MyServerWriter(dos).start();
35 } catch (IOException e) {
36 e.printStackTrace();
37 }
38 }
39 }
40
41 // 接受并打印客户端传过来的信息
42 class MyServerReader extends Thread {
43 private DataInputStream dis;
44
45 public MyServerReader(DataInputStream dis) {
46 this.dis = dis;
47 }
48
49 public void run() {
50 String info;
51 try {
52 while (true) {
53 // 如果对方,即客户端没有说话,那么就会阻塞到这里,
54 // 这里的阻塞并不会影响到其他线程
55 info = dis.readUTF();
56 // 如果状态有阻塞变为非阻塞,那么就打印接受到的信息
57 System.out.println("对方说: " + info);
58 if (info.equals("bye")) {
59 System.out.println("对方下线,程序退出!");
60 System.exit(0);
61 }
62 }
63 } catch (IOException e) {
64 e.printStackTrace();
65 }
66 }
67 }
68
69 // 从键盘获得输入流并写入信息到客户端
70 class MyServerWriter extends Thread {
71 private DataOutputStream dos;
72
73 public MyServerWriter(DataOutputStream dos) {
74 this.dos = dos;
75 }
76
77 public void run() {
78 // 读取键盘输入流
79 InputStreamReader isr = new InputStreamReader(System.in);
80 // 封装键盘输入流
81 BufferedReader br = new BufferedReader(isr);
82 String info;
83 try {
84 while (true) {
85 info = br.readLine();
86 dos.writeUTF(info);
87 if (info.equals("bye")) {
88 System.out.println("自己下线,程序退出!");
89 System.exit(0);
90 }
91 }
92 } catch (IOException e) {
93 e.printStackTrace();
94 }
95 }
96 }


客户端代码:

1 package com.b510.socket1705.freeechatroom;
2
3 import java.io.*;
4 import java.net.*;
5
6 /**
7 * 客户端程序
8 *
9 * @author Hongten
10 *
11 * @time 2012-4-29 2012
12 */
13 public class TestClient {
14 public static void main(String args[]) {
15 try {
16 // 创建socket对象,指定服务器的ip地址,和服务器监听的端口号
17 // 客户端在new的时候,就发出了连接请求,服务器端就会进行处理,如果服务器端没有开启服务,那么
18 // 这时候就会找不到服务器,并同时抛出异常==》java.net.ConnectException: Connection
19 // refused: connect
20 Socket s1 = new Socket("127.0.0.1", 8888);
21
22 // =========客户端,在这里应该先打开输入流,在打开输出流,
23 // =========因为客户端执行的操作是先说,再听,说,听,说,听.....
24
25 // 打开输入流
26 InputStream is = s1.getInputStream();
27 // 封装输入流
28 DataInputStream dis = new DataInputStream(is);
29 // 打开输出流
30 OutputStream os = s1.getOutputStream();
31 // 封装输出流
32 DataOutputStream dos = new DataOutputStream(os);
33
34 // 创建并启用两个线程
35 new MyClientReader(dis).start();
36 new MyClientWriter(dos).start();
37 } catch (IOException e) {
38 e.printStackTrace();
39 }
40 }
41 }
42
43 // 接受并打印服务器端传过来的信息
44 class MyClientReader extends Thread {
45 private DataInputStream dis;
46
47 public MyClientReader(DataInputStream dis) {
48 this.dis = dis;
49 }
50
51 public void run() {
52 String inf