一、搭建服务器端

a)、创建ServerSocket对象绑定监听端口。

b)、通过accept()方法监听客户端的请求。

c)、建立连接后,通过输入输出流读取客户端发送的请求信息。

d)、通过输出流向客户端发送请求信息。

e)、关闭相关资源。

 1 package socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.PrintWriter;
 7 import java.net.ServerSocket;
 8 import java.net.Socket;
 9 
10 public class SocketService {
11     //搭建服务器端
12     public static void main(String[] args) throws IOException{
13         SocketService socketService = new SocketService();
14         //1、a)创建一个服务器端Socket,即SocketService 
15         socketService.oneServer();
16     }
17     public  void oneServer(){
18         try{
19             ServerSocket server=null;
20             try{
21                 server=new ServerSocket(5209);
22                 //b)指定绑定的端口,并监听此端口。
23                 System.out.println("服务器启动成功");
24                 //创建一个ServerSocket在端口5209监听客户请求
25             }catch(Exception e) {
26                     System.out.println("没有启动监听:"+e);
27                     //出错,打印出错信息
28             }
29             Socket socket=null;
30             try{
31                 socket=server.accept();
32                 //2、调用accept()方法开始监听,等待客户端的连接 
33                 //使用accept()阻塞等待客户请求,有客户
34                 //请求到来则产生一个Socket对象,并继续执行
35             }catch(Exception e) {
36                 System.out.println("Error."+e);
37                 //出错,打印出错信息
38             }
39             //3、获取输入流,并读取客户端信息 
40             String line;
41             BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
42             //由Socket对象得到输入流,并构造相应的BufferedReader对象
43             PrintWriter writer=new PrintWriter(socket.getOutputStream());
44             //由Socket对象得到输出流,并构造PrintWriter对象
45             BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
46             //由系统标准输入设备构造BufferedReader对象
47             System.out.println("Client:"+in.readLine());
48             //在标准输出上打印从客户端读入的字符串
49             line=br.readLine();
50             //从标准输入读入一字符串
51             //4、获取输出流,响应客户端的请求 
52             while(!line.equals("end")){
53             //如果该字符串为 "bye",则停止循环
54                 writer.println(line);
55                 //向客户端输出该字符串
56                 writer.flush();
57                 //刷新输出流,使Client马上收到该字符串
58                 System.out.println("Server:"+line);
59                 //在系统标准输出上打印读入的字符串
60                 System.out.println("Client:"+in.readLine());
61                 //从Client读入一字符串,并打印到标准输出上
62                 line=br.readLine();
63                 //从系统标准输入读入一字符串
64             } //继续循环
65 
66             //5、关闭资源 
67             writer.close(); //关闭Socket输出流
68             in.close(); //关闭Socket输入流
69             socket.close(); //关闭Socket
70             server.close(); //关闭ServerSocket
71         }catch(Exception e) {//出错,打印出错信息
72             System.out.println("Error."+e);
73         }
74     }
75 }

二、搭建客户器端

a)、创建Socket对象,指明需要连接的服务器的地址和端口。

b)、建立连接后,通过输出流向服务器发送请求信息。

c)、通过输入流获取服务器的响应信息。

d)、关闭响应资源

 1 package socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.PrintWriter;
 8 import java.net.InetAddress;
 9 import java.net.Socket;
10 import java.net.URL;
11 
12 public class SocketClient {
13     // 搭建客户端
14     public static void main(String[] args) throws IOException {
15         try {
45             // 1、创建客户端Socket,指定服务器地址和端口
46             // Socket socket=new Socket("127.0.0.1",5200);
47             Socket socket = new Socket("192.168.1.115", 5209);
48             System.out.println("客户端启动成功");
49             // 2、获取输出流,向服务器端发送信息
50             // 向本机的52000端口发出客户请求
51             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
52             // 由系统标准输入设备构造BufferedReader对象
53             PrintWriter write = new PrintWriter(socket.getOutputStream());
54             // 由Socket对象得到输出流,并构造PrintWriter对象
55             //3、获取输入流,并读取服务器端的响应信息 
56             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
57             // 由Socket对象得到输入流,并构造相应的BufferedReader对象
58             String readline;
59             readline = br.readLine(); // 从系统标准输入读入一字符串
60             while (!readline.equals("end")) {
61                 // 若从标准输入读入的字符串为 "end"则停止循环
62                 write.println(readline);
63                 // 将从系统标准输入读入的字符串输出到Server
64                 write.flush();
65                 // 刷新输出流,使Server马上收到该字符串
66                 System.out.println("Client:" + readline);
67                 // 在系统标准输出上打印读入的字符串
68                 System.out.println("Server:" + in.readLine());
69                 // 从Server读入一字符串,并打印到标准输出上
70                 readline = br.readLine(); // 从系统标准输入读入一字符串
71             } // 继续循环
72             //4、关闭资源 
73             write.close(); // 关闭Socket输出流
74             in.close(); // 关闭Socket输入流
75             socket.close(); // 关闭Socket
76         } catch (Exception e) {
77             System.out.println("can not listen to:" + e);// 出错,打印出错信息
78         }
79     }
80 
81 }

这是我们先启动服务器端,再启动客户端(顺序不能乱)

 

posted on 2016-11-03 10:20  周帝  阅读(85371)  评论(4编辑  收藏  举报