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 }       
  • 相关阅读:
    xml文档格式学习笔记
    Visual Studio学习记录
    Java学习笔记
    C#项目学习记录
    Linux命令行与shell脚本编程大全 学习笔记
    NodeJS (npm) 学习笔记
    Angular学习笔记
    TypeScript学习笔记
    java 项目相关 学习记录
    docker学习记录
  • 原文地址:https://www.cnblogs.com/HuiH/p/12620801.html
Copyright © 2011-2022 走看看