![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
socket
文章平均质量分 71
睿科知识云
中国航天科工信息系统项目管理高级工程师
取得法律职业资格证书
希望和大家一起学习一起进步
展开
-
图解TCP四次握手断开连接
图解TCP四次握手断开连接建立连接非常重要,它是数据正确传输的前提;断开连接同样重要,它让计算机释放不再使用的资源。如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪忧。建立连接需要三次握手,断开连接需要四次握手,可以形象的比喻为下面的对话:[Shake 1] 套接字A:“任务处理完毕,我希望断开连接。”[Shake 2] 套接字B:“哦,是吗?请稍等,我准备一下。”等待片刻后……[Shake 3] 套接字B:“我准备好了,可以断开连接原创 2022-01-12 12:25:05 · 127 阅读 · 0 评论 -
详细分析TCP数据的传输过程
详细分析TCP数据的传输过程建立连接后,两台主机就可以相互传输数据了。如下图所示:图1:TCP 套接字的数据交换过程上图给出了主机A分2次(分2个数据包)向主机B传递200字节的过程。首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包、普通数据包等)包后必须立即回传ACK包,这样发送方才能确认数据传输成功。此时原创 2022-01-11 12:29:25 · 856 阅读 · 0 评论 -
图解TCP数据报结构以及三次握手(非常详细)
图解TCP数据报结构以及三次握手(非常详细)TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)。可以形象的比喻为下面的对话:[Shake原创 2022-01-11 12:25:58 · 541 阅读 · 0 评论 -
TCP协议的粘包问题(数据的无边界性)
TCP协议的粘包问题(数据的无边界性)上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。例如,write()/send() 重复执行三次,每次都发送字符串"abc",那么目标机器上的 read()/recv() 可能分三次接收,每次都接收"abc";也可能分两次接收,第一次接收"abcab",第二次接收原创 2022-01-11 12:22:31 · 285 阅读 · 0 评论 -
socket缓冲区以及阻塞模式详解
socket缓冲区以及阻塞模式详解在上一节中讲到,可以使用 write()/send() 函数发送数据,使用 read()/recv() 函数接收数据,本节就来看看数据是如何传递的。socket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些原创 2022-01-11 12:19:45 · 590 阅读 · 0 评论 -
send()/recv()和write()/read():发送数据和接收数据
send()/recv()和write()/read():发送数据和接收数据在 Linux 和 Windows 平台下,使用不同的函数发送和接收 socket 数据,下面我们分别讲解。Linux下数据的接收和发送Linux 不区分套接字文件和普通文件,使用 write() 可以向套接字中写入数据,使用 read() 可以从套接字中读取数据。前面我们说过,两台计算机之间的通信相当于两个套接字之间的通信,在服务器端用 write() 向套接字写入数据,客户端就能收到,然后再使用 read() 从套接字中原创 2022-01-11 12:14:19 · 1057 阅读 · 0 评论 -
listen()和accept()函数:让套接字进入监听状态并响应客户端请求
listen()和accept()函数:让套接字进入监听状态并响应客户端请求对于服务器端程序,使用 bind() 绑定套接字后,还需要使用 listen() 函数让套接字进入被动监听状态,再调用 accept() 函数,就可以随时响应客户端的请求了。listen() 函数通过 listen() 函数可以让套接字进入被动监听状态,它的原型为:int listen(int sock, int backlog); //Linuxint listen(SOCKET sock, int backlog);原创 2022-01-11 12:10:06 · 703 阅读 · 0 评论 -
bind()和connect()函数:绑定套接字并建立连接
bind()和connect()函数:绑定套接字并建立连接socket() 函数用来创建套接字,确定套接字的各种属性,然后服务器端要用 bind() 函数将套接字与特定的 IP 地址和端口绑定起来,只有这样,流经该 IP 地址和端口的数据才能交给套接字处理。类似地,客户端也要用 connect() 函数建立连接。bind() 函数bind() 函数的原型为:int bind(int sock, struct sockaddr *addr, socklen_t addrlen); //Linuxi原创 2022-01-11 12:06:45 · 1154 阅读 · 0 评论 -
socket()函数用法详解:创建套接字
socket()函数用法详解:创建套接字不管是 Windows 还是 Linux,都使用 socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。上一节中我们讲到了 Windows 和 Linux 在对待 socket 方面的区别。Linux 中的一切都是文件,每个文件都有一个整数类型的文件描述符;socket 也是一个文件,也有文件描述符。使用 socket() 函数创建套接字以后,返回值就是一个 int 类型的文件描述符。Windows 会区分 sock原创 2022-01-11 12:00:52 · 579 阅读 · 0 评论 -
Windows下的socket演示程序
Windows下的socket演示程序上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。服务器端代码 server.cpp:#include <stdio.h>#include <winsock2.h>#pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dllint main(){ //初始化原创 2022-01-11 11:57:07 · 189 阅读 · 0 评论 -
Linux下的socket演示程序
Linux下的socket演示程序和C语言教程一样,我们从一个简单的“Hello World!”程序切入 socket 编程。本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。服务器端代码 server.cpp:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <原创 2022-01-11 11:54:18 · 138 阅读 · 0 评论 -
IP、MAC和端口号——网络通信中确认身份信息的三要素
IP、MAC和端口号——网络通信中确认身份信息的三要素在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是 IP 地址、MAC 地址和端口号。IP地址IP地址是 Internet Protocol Address 的缩写,译为“网际协议地址”。目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其是在教育网中,已经大量使用。一台计算机可以拥有一个独立的 IP 地址,一个局域网也可以拥有一个独立的 IP 地址(对外就好像只有一台计算机)。对于目前广泛使用原创 2022-01-12 12:25:48 · 199 阅读 · 0 评论 -
TCP/IP协议族
TCP/IP协议族协议(Protocol)就是网络通信过程中的约定或者合同,通信的双方必须都遵守才能正常收发数据。协议有很多种,例如 TCP、UDP、IP 等,通信的双方必须使用同一协议才能通信。协议是一种规范,由计算机组织制定,规定了很多细节,例如,如何建立连接,如何相互识别等。协议仅仅是一种规范,必须由计算机软件来实现。例如 IP 协议规定了如何找到目标计算机,那么各个开发商在开发自己的软件时就必须遵守该协议,不能另起炉灶。TCP/IP 模型包含了 TCP、IP、UDP、Telnet、FTP、SM原创 2022-01-10 20:24:45 · 191 阅读 · 0 评论 -
OSI网络七层模型简明教程
OSI网络七层模型简明教程如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大。OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层原创 2022-01-10 20:22:48 · 162 阅读 · 0 评论 -
套接字有哪些类型?socket有哪些类型?
套接字有哪些类型?socket有哪些类型?这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字——Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及套接字,指的都是 Internet 套接字。根据数据的传输方式,可以将 Internet 套接字分成两种类型。通过 socket() 函数创建连接时,必须告诉它使用哪原创 2022-01-10 20:20:32 · 747 阅读 · 0 评论 -
socket是什么?套接字是什么?
socket是什么?套接字是什么?网络编程就是编写程序使两台联网的计算机相互交换数据。这就是全部内容了吗?是的!网络编程要比想象中的简单许多。那么,这两台计算机之间用什么传输数据呢?首先需要物理连接。如今大部分计算机都已经连接到互联网,因此不用担心这一点。在此基础上,只需要考虑如何编写数据传输程序。但实际上这点也不用愁,因为操作系统已经提供了 socket。即使对网络数据传输的原理不太熟悉,我们也能通过 socket 来编程。什么是 socket?socket 的原意是“插座”,在计算机通信领域,原创 2022-01-10 20:16:36 · 221 阅读 · 0 评论