• 周四. 4月 25th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

java 26

admin

11月 28, 2021

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 }

《java 26》有2个想法
  1. Hi there! Do you know if they make any plugins to help with Search Engine Optimization? I’m trying to get my website to rank for
    some targeted keywords but I’m not seeing very good gains.
    If you know of any please share. Appreciate it! I saw similar blog here: Scrapebox AA List

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注