Tcp/Ip协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

    随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

一、Tcp/Ip

        Tcp/Ip :基于三次握手,面向连接的双向通路,安全性高,收发顺序一致,大小无限制,相对时间较慢,准确性较高。
      

三次握手:

      第一次握手:客户端发起,发送SYN请求报文,序列化:X;服务器收到SYN请求报文。

     第二次握手:服务器端发起,发送ACK确认报文,确认号:X+1;发送SYN请求报文,序列号Y,客户端收到SYN/ACK请求确认报文。

      第三次握手:客户端发送ACK确认报文,确认号Y+1,服务器端收到ACK确认报文。

二、使用步骤

1.引入库

代码如下(示例):

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

2.读入数据

代码如下(示例):

  服务端
 ServerSocket ss = null;
        Socket socket = null;
        InputStream is = null;
        OutputStream os = null;
            try {

                // 创建服务端套接字对象,定端口为6666,用来接收客户端发来的socket对象
                ss = new ServerSocket(6666);
                // 接收客户端发来的socket,当服务器没有接收到socket时,会处于阻塞
                socket = ss.accept();

                // 用流来接收客户端发来的内容
                // 从套接字中获取字节输入流
                is = socket.getInputStream();
                // 准备字节数组,作为进行读取的介质
                byte[] bytes = new byte[1024];
                // 从字节流中读取内容,读取到数组中,并返回读取的字节数量
                int length = is.read(bytes);
                // 将字节数组拼成字符串
                String content = new String(bytes, 0, length);

                System.out.println(content);

                // 通过输出流向客户端发送回复
                
                //获取字节输出流,进行回复
                os = socket.getOutputStream();
                //准备一个回复语句
                String response = "恭喜你,连接成功,可以下课订饭了";
                //将回复语句转换为字节数组进行传递
                
                switch (content) {
                case "1":
                    response = "1";
                    break;
                case "2":

                    break;
                case "3":

                    break;
                case "4":
                    break;
                default:
                    break;
                }
                os.write(response.getBytes());

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                try {
                    is.close();
                    os.close();
                    socket.close();
                    ss.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
客户端代码public class ClientTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Socket socket = null;
        OutputStream os = null;
        InputStream is = null;

        try {
            socket = new Socket("127.0.0.1", 9999);
            Scanner scan = new Scanner(System.in);
            while (true) {
                os = socket.getOutputStream();
                String request = scan.next();
                os.write(request.getBytes());
                is = socket.getInputStream();
                byte bytes[] = new byte[1024];
                int length = 0;
                String str = "";
                length = is.read(bytes);
                str += new String(bytes, 0, length);

                System.out.println(str);
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                is.close();
                os.close();
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

总结

TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽

  • TCP 面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接时间。
  • TCP传输数据无大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。
  • TCPTCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。

你可能感兴趣的:(机器学习,TCP/IP,三次握手,Java,网络通信)