zoukankan      html  css  js  c++  java
  • 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()+"
    ");
    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 }       
  • 相关阅读:
    Account group in ERP and its mapping relationship with CRM partner group
    错误消息Number not in interval XXX when downloading
    错误消息Form of address 0001 not designated for organization
    Algorithm类介绍(core)
    梯度下降与随机梯度下降
    反思
    绘图: matplotlib核心剖析
    ORB
    SIFT
    Harris角点
  • 原文地址:https://www.cnblogs.com/HuiH/p/12620801.html
Copyright © 2011-2022 走看看