Socket编程

Socket变成的基本步骤(TCP/UDP)

  常见socket连接时,可以指定使用的传输层协议,socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该socket连接就是一个TCP连接。Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:(服务器端建立连接过程)

  1、构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。

  2、重复如下几个步骤:

    a. 调用socket的accept()方法来获得下面客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。

    b. 通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。

    c. 结束的时候调用socket实例的close()方法关闭socket连接。

客户端的请求过程稍微有点不一样:

  1、构建socket实例,通过指定的远程服务器地址和端口来建立连接。

  2、通过socket实例包含的InputStream和OutputStream来进行数据的读写。

  3、操作结束后调用socket实例的close方法,关闭。

 1 //简单的 Client/Server程序设计
 2 //服务端
 3 public class Server{
 4     public static void main(String args[]){
 5         try{
 6             ServerSocket server = null;
 7             try{
 8                 server = new ServerSocket(4700);
 9                 //创建一个ServerSocket在端口4700监听客户请求
10             }catch(Exception e){
11                 System.out.println("can not listen to:"+e);
12                 //出错,打印出错信息
13             }
14             System.out.ptintln("server------------------------");
15             Socket socket = null;
16             try{
17                 socket = server.accept();
18                 //使用accept阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行
19             }catch(Exception e){
20                System.out.println("Error."+e);
21                 //出错,打印出错信息
22             }
23             String line;
24             BufferedReader is =new BufferedReader(new InputStreamReader(socket.getInputStream()));
25             //由socket对象得到的输入流,并构造相应的BufferedReader对象
26             PrintWriter os = new PrintWriter(socket.getOutputStream());
27             //由socket对象得到输出流,并构造PrintWriter对象
28             BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
29             //由系统标准输入设备构造BufferedReader对象
30             System.out.println("Client:"+is.readLine());
31             //在标准输出上打印从客户端读入的字符串
32             line = sin.readLine();
33             //从标准输入读入一字符串
34             while(!line.equals("bye")){
35                 //如果该字符串为"bye",则停止循环,向客户输出该字符串
36                 os.println(line);
37                 //刷新输出流,使Client马上受到该字符串
38                 os.flush();
39                 //从Client读入一字符串,并打印到标准输出上
40                 System.out.println("Client:"+is.readLine()+"\n");
41                 line = sin.readLine();
42                 //从系统标准输入读入一字符串
43             }//继续循环
44             os.close();//关闭Socket输出流
45             is.close();
46             socket.close();
47             server.close();
48         }catch(Exception e){
49             System.out.println("Error:"+e);
50         }
51     }
52 } 
53 
54 //客户端
55 public class Client{
56     public static void main(String args[]){
57         try{
58             Socket socket = new Socket("127.0.0.1",4700);
59             //向本机的4700端口发出客户请求
60             BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
61             //由系统标准输入设备构造BufferedReader对象
62             PrintWriter os = new PrintWriter(socket.getOutputStream());
63             //由socket对象得到的输出流,并构造PrintWriter对象
64             BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
65             System.out.println("Client----------------------------");
66             //由socket对象得到输入流,并构造相应的BufferedReader
67 
68             String readline;
69             readline = sin.readLine();//从系统标准输入读入一字符串
70             while(!readline.equals("bye")){
71                 //若从标准输入读入的字符串为"bye"则停止循环
72                 os.println(readline);
73                 //将从系统标准输入读入的字符串输出到Server
74                 os.flush();
75                 //刷新输出流,使Server马上收到该字符串
76                 System.out.println("Server:"+is.readline());
77                 //从Server读入一字符串,并打印到标准输出上
78                 readline = sin.readLine();//从系统标准输入读入一字符串
79             }//继续循环
80             os.close();//关闭socket输出流
81             is.close();//关闭socket输入流
82             socket.close();//关闭socket
83         }catch(Exception e){
84             System.out.println("Error:"+e);//出错,则打印出错信息
85         }
86     }
87 }       
posted @ 2020-04-02 17:23  MrHH  阅读(...)  评论(...编辑  收藏