网络编程之TCP协议

TCP基本概述

TCP是一种运输层的网络协议,是一种面向连接,

可靠的,基于字节流的网络协议。进行TCP通信的时候,双方一定要先建立连接,也就是三次握手,建立稳定连接后,接下来就是我们的通信了接下来就可以进行正常的发送和接收数据。收发数据的时候是基于字节流的

三次握手解读

第一次握手

syn=1:这是SYN标志位,用于请求建立连接。表明客户端希望与服务器建立连接

seq=x:这是序列号字段,用于指定发送数据的起始序号,x为该段数据的序列号,接收数据方通过序列号来确认数据

ack=null:第一次握手中,由于客户端尚未收到服务器的确认,因此ack字段不携带任何值

第二次握手

syn=1:表明服务器希望与客户端建立连接

seq=y:该字段指定服务器发送的数据包的起始序列号,y为序列号

ack=1:这是确认号字段,用于确认收到的数据。在第二次握手中,服务器接收到客户端的请求后,对其进行确认,因此将ack字段设置为1

ACK=y+1:表示服务器期望接收到下一个序列号为x+1的数据。

第三次握手

syn=0:表示不再请求建立连接,而是确认连接已经建立

seq=y+1:该字段指定客户端发送的数据包的起始序列号,y+1为服务器想收到的序列号

ack=1:在第三次握手中,客户端接收到服务器的确认后,对其进行确认,并将ack字段设置为1

TCP编程之服务器编程步骤

1.创建ServerSocket并指定端口号

2.等待客户端连接

3.获取输入流和输出流

4.从客户端接收数据

5.向客户端发送数据

6.关闭连接和关流

代码举例

import java.net.ServerSocket;
import java.net.Socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TCPServer {
    public static void main(String[] args) {
        try {
            // 创建ServerSocket并指定端口
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("服务器,已经启动,等待连接。。。。");

            // 等待客户端连接
            Socket clientSocket = serverSocket.accept();
            System.out.println("客户端已经连接: " + clientSocket.getInetAddress().getHostAddress());

            // 获取输入流和输出流
            InputStream inputStream = clientSocket.getInputStream();
            OutputStream outputStream = clientSocket.getOutputStream();

            // 从客户端接收数据
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String receivedMessage = new String(buffer, 0, bytesRead);
            System.out.println("来自客户端的信息: " + receivedMessage);

            // 向客户端发送数据
            String responseMessage = "你~好,我是服务器";
            outputStream.write(responseMessage.getBytes());

            // 关闭连接
            inputStream.close();
            outputStream.close();
            clientSocket.close();
            serverSocket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

TCP编程之客户端编程步骤

1.连接到服务器

2.获取输入流和输出流

3.向服务器发送数据

4.从服务器接收数据

5.关闭连接和关流

代码举例

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

public class TCPClient {
    public static void main(String[] args) {
        try {
            // 连接到服务器
            Socket socket = new Socket("localhost", 8888);
            System.out.println("连接到服务器");

            // 获取输入流和输出流
            InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream();

            // 向服务器发送数据
            String message = "你~好,我是客户端";
            outputStream.write(message.getBytes());

            // 从服务器接收数据
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String receivedMessage = new String(buffer, 0, bytesRead);
            System.out.println("来自服务器的信息: " + receivedMessage);

            // 关闭连接
            inputStream.close();
            outputStream.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值