zoukankan      html  css  js  c++  java
  • java 26

    TCP传输

      Socket和ServerSocket

      建立客户端和服务器

      建立连接后,通过Socket中的IO流进行数据的传输

      关闭socket

      同样,客户端与服务器是两个独立的应用程序

    TCP协议发送和接收数据的思路图解:

     

    TCP传输-客户端思路

      1:建立客户端的Socket服务,并明确要连接的服务器。

      2:如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO进行数据的读取和写入.该通道称为Socket流,Socket流中既有读取流,也有写入流.

      3:通过Socket对象的方法,可以获取这两个流

      4:通过流的对象可以对数据进行传输

      5:如果传输数据完毕,关闭资源

    代码体现:

     1 /*
     2      TCP客户端:
     3          A:创建发送端的Socket对象,寻找到相对应的IP和端口以后,连接就建立成功
     4              Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。    
     5          B:创建输出流对象发送数据
     6          C:创建输入流对象接收数据
     7          D:释放资源
     8          
     9     连接被拒绝。TCP协议一定要先启动服务器端,再开客户端
    10       java.net.ConnectException: Connection refused: connect
    11  */
    12 public class ClientDemo {
    13     public static void main(String[] args) throws IOException, IOException {
    14         
    15         //A:创建发送端的Socket对象
    16         //Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。    
    17         Socket s = new Socket("172.19.xx.xx",10010);
    18     
    19         //B:创建输出流对象发送数据
    20         OutputStream os = s.getOutputStream();
    21         os.write("我来拉!!".getBytes());
    22         
    23         //C:创建输入流对象接收数据
    24         InputStream is = s.getInputStream();
    25         byte[] bys = new byte[1024];
    26         int len = is.read(bys);//阻塞式
    27         String str = new String(bys,0,len);
    28         System.out.println(str);
    29         
    30         //释放资源
    31         s.close();
    32     
    33     }
    34 }

    TCP传输—服务端思路

      1:建立服务器端的socket服务,需要一个端口

      2:服务端没有直接流的操作,而是通过accept方法获取客户端对象,在通过获取到的客户端对象的流和客户端进行通信

      3:通过客户端的获取流对象的方法,读取数据或者写入数据

      4:如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服务端是一直提供服务的

    代码体现:

     1 /*
     2      TCP服务器端:
     3          A:创建服务端对象ServerSocket,监听窗口
     4          B:通过accept方法返回一个Socket对象
     5          // public Socket accept()
     6          C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
     7          D:创建输出流发送数据
     8          E:释放资源
     9  */
    10 
    11 public class ServerDemo {
    12 
    13     public static void main(String[] args) throws IOException {
    14 
    15         // A:创建服务端对象ServerSocket,监听窗口
    16         ServerSocket ss = new ServerSocket(10010);
    17 
    18         // B:通过accept方法返回一个Socket对象
    19         // public Socket accept()
    20         Socket s = ss.accept();//阻塞式,等待客户端的连接
    21 
    22         // C:获取Socket的输入流,读取客户端发来的数据,并打印到控制台
    23         // public InputStream getInputStream() 返回此套接字的输入流
    24         InputStream is = s.getInputStream();
    25 
    26         // 读取数据
    27         byte[] bys = new byte[1024];
    28         int len = is.read(bys);// 阻塞式,等待客户端传输数据
    29         // InputStrem : public int read()
    30         // 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。
    31         // 如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。
    32         String str = new String(bys, 0, len);
    33 
    34         // 获取客户端的名称
    35         // 获取客户端的地址对象,再获取名称
    36         String name = s.getInetAddress().getHostName();
    37 
    38         //打印数据到控制台
    39         System.out.println("从"+name+"发送: "+str);
    40         
    41         // D:创建输出流发送数据
    42         OutputStream os = s.getOutputStream();
    43         os.write("数据已收到".getBytes());
    44 
    45         // E:释放资源
    46         s.close();// 释放客户端的资源
    47         // ss.close(); 这个不能释放,因为一释放,服务器就关闭了。
    48         
    49 
    50     }
    51 }
  • 相关阅读:
    Mac上的USB存储设备使用痕迹在新版操作系统有所变化
    Beware of the encrypted VM
    A barrier for Mobile Forensics
    Second Space could let suspect play two different roles easily
    Take advantage of Checkra1n to Jailbreak iDevice for App analysis
    Find out "Who" and "Where"
    Where is the clone one and how to extract it?
    Downgrade extraction on phones running Android 7/8/9
    高版本安卓手机的取证未来
    How to extract WeChat chat messages from a smartphone running Android 7.x or above
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5964723.html
Copyright © 2011-2022 走看看