网络编程学习笔记(三)TCP协议及客户端与服务端交互Demo

本文介绍了TCP协议的基本概念,包括其可靠性、三次握手和四次挥手过程。详细阐述了TCP客户端和服务器端的建立连接、数据传输以及关闭连接的步骤。通过Socket和ServerSocket类展示了如何创建TCP客户端和服务端,并提供了简单的交互示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP的一些基本概念

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流(当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流)的传输层通信协议。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

TCP传输涉及的对象与UDP不同,其需要通过三次握手确定连接的建立,建立连接之后进行数据的传输

连接建立——三次握手

TCP三次握手的过程如下:

  • 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  • 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
  • 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

这里写图片描述

连接断开——四次挥手
建立一个连接需要三次握手,而终止一个连接要经过四次握手,由于其是全双工,具体过程如下:

  • 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
  • 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认ACK。
  • 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
  • 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
    既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

这里写图片描述

TCP不同于UDP,是面向连接的,因此必须先开服务端

Socket和ServerSocket

  • 建立客户端和服务器端
  • 建立连接后,通过Socket中的IO流进行数据的传输
  • 关闭Socket

Socket:此类实现客户端套接字,套接字是两台机器间通信的端点。

构造函数:

  • Socket():通过系统默认类型的SocketImpl创建未连接套接字,可以new出对象,通过connect(SocketAddress endpoint)方法将此套接字连接到服务器,SocketAddress实际就是IP套接字地址(IP地址+端口号),也可以是(主机名+端口号),此种情况下会尝试解析主机名,如果解析失败,则改地址将被视为未解析地址。
  • Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定IP地址的指定端口号
  • Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

ServerSocket:此类实现服务端套接字。服务器套接字等待请求通过网络传入,它基于该请求执行某些操作,然后可能想请求者返回结果。(一个服务端可以同时给多个客户端提供服务)

TCP客户端

TCP传输,客户端建立的过程
1.创建tcp客户端Socket服务,使用的是Socket对象(建议该对象创建时明确目的地,即要连接的主机)
2.如果连接建立成功,说明数据传输通道已经建立(底层帮助建立),这个通道实际就是一个流(输入流,输出流),Socket流(网络IO流)
Socket流是底层建立好的,既然是流,说明这里是既有输入,又有输出,想要输入或者输出流对象,可以找Soc

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值