这篇文章介绍在Linux下的socket编程,完成TCP服务器、客户端的创建,实现数据通信。...二、TCP协议介绍 在Linux应用层做编程,接触到是传输层协议,TCP/UDP,如果搞Linux网络驱动开发(网卡驱动),那么底层的网络协议就会接触的更多,协议只是一个数据格式的约定而已,自己也可以设计自己的协议...下面这张图介绍两个设备通过网络通信的一个大致流程: TCP协议是点对点传输协议。TCP协议属于C/S模型。 TCP协议里包含服务器和客户端。...接下来学习主要学习TCP服务器创建和TCP客户端创建,完成客户端与服务器之间的通信。 TCP服务器可以被多个客户端连接。...关闭连接*/ close(client_fd); close(sockfd); return 0; } 3.2 创建TCP客户端 #include #include
OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...) 设置服务器协议族sockaddr_in结构*/ bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET;//必须和套接字的创建...: %c\n",(char)optopt); break; default: break; } } /*(1) 创建套接字
all:server_tcp client_tcp server_tcp:UdpServerMain.cc g++ -o $@ $^ -std=c++17 -lpthread client_tcp...它通常在 socket、bind 和 listen 之后调用,用于从监听队列中取出一个客户端连接,并创建一个新的套接字用于与客户端通信。...创建 Tcp Socket _listensockfd = ::socket(AF_INET, SOCK_STREAM, 0); // TCP SOCKET if(_listensockfd...EchoServer -- 多进程 上面我们写的只是单进程方面的,接下来我们来创建多进程方面的 但是这里有个问题:当前创建出子进程的时候,父进程还需等待子进程,默认这里就阻塞了 但是我们这里是让子进程去做文本处理...EchoServer -- 线程池 引入我们之前写的【Linux】:线程库 Thread.hpp 简单封装 Thread.hpp 以及 单例模式下的【Linux】:日志策略 + 线程池(单例模式 Threadpool.hpp
其中复位标志RST的作用就是“复位相应的TCP连接”。 TCP连接和释放时还有许多细节,比如半连接状态、半关闭状态等。详情请参考这方面的巨著《TCP/IP详解》和《UNIX网络编程》。...原因在于Socket.close()方法的语义和TCP的“FIN”标志语义不一样:发送TCP的“FIN”标志表示我不再发送数据了,而Socket.close()表示我不在发送也不接受数据了。...; 客户端和服务器统一使用TCP短连接。...然后是客户端和服务器统一使用TCP长连接:客户端使用TCP长连接很容易配置(直接设置HttpClient就好),而服务器配置长连接就比较麻烦了,就拿tomcat来说,需要设置tomcat的maxKeepAliveRequests...,固定5分钟tcp连接回收,而且发现连接出错时,重发之前10s内消息。
wide': 0 tcp:tcp_retransmit_skb...0 tcp:tcp_send_reset 0 tcp:tcp_receive_reset...5 tcp:tcp_rcv_space_adjust...0 tcp:tcp_retransmit_synack 9 tcp:tcp_probe...] [k] tcp_rcv_state_process + 50.00% 0.00% python [kernel.kallsyms] [k] __tcp_transmit_skb
引言 TCP协议是传输层中非常重要的协议。本篇博客我们将从TCP头部信息、TCP状态转移、TCP数据流、TCP数据流的控制等等方面来讨论! 在TCP协议中,通信双方的地位是平等的。...在建立连接后,操作系统会为通信双方在内核中创建相应的数据结构和读写缓冲区,通信双方的内核中都有发送缓冲区和接收缓冲区。...当接收缓冲区收到一个或者多个TCP报文后,TCP模块将它们携带的应用程序的数据按照TCP报文的序号【见下文】依次放入TCP接收缓冲区中,并通知应用程序读取数据。...Linux中(BSD Unix和Windows也是如此), 超时以500ms为一个单位进行控制, 每次判定超时重发的超时 时间都是500ms的整数倍....接下来我们来分析一下四次挥手过程中通信双方状态变化: 如图,OS内核会为TCP连接双方创建相应的11TCP状态【包括三次握手过程中的5种状态和四次挥手断开过程中的6种状态】。
TCP socket API 详解 下面介绍程序中用到的 socket API,这些函数都在 sys/socket.h 中。...Echo Server 有了上面的接口,我们就可以实现以TCP为基础的简单消息回显服务器了,运行结果应该如下图所示: 代码如下: TCP服务器 #pragma once #include <iostream...port(port), _listensockfd(-1), _isruning(false) { } void InitServer() { // 1.创建...{ ::close(_listensockfd);//要关掉不需要的文件描述符,避免fd泄露问题 if(fork())//子进程再创建孙子进程...LogLevel::ERROR) << "Usage:" << argv[0] << " serverip serverport"; Die(ARGV_ERR); } // 1.创建
tcp服务官方文档 swoole tcp tcp server <?...php /** * Class Tcp * Tcp服务 */ class Tcp { CONST HOST = "0.0.0.0"; CONST PORT = 9501;...public $tcp = null; public function __construct() { $this->tcp = new swoole_server(self...public function onClose($tcp, $fd) { echo "客户端id: {$fd} 关闭了连接\n"; } } $tcp = new Tcp...请输入消息:swoole tcp 客户端测试 服务端将客户端发送的数据原样返回:swoole tcp 客户端测试
Linux 中(BSD Unix 和 Windows 也是如此), 超时以 500ms 为一个单位进行控制, 每次判定超时重发的超时时间都是 500ms 的整数倍....2.如果只进行一次握手(客户端给服务器发建立请求,服务器不做应答),这样客户端根本无法知道是否建立成功,并且,如果客户端发送大量的SYN,服务器就要建立连接,创建对应的端口,这样就会造成服务器资源紧缺,...所以三次握手,即便是客户端突然崩掉了,服务器也不会损失,即便是客户端没崩,客户端发送的ACK丢失了,服务器默认建立连接失败,不进行连接创建,失败的成本也转移到了客户端的身上(因为客户端居多,服务器只有一个...面向字节流 用户在发送数据的时候,只关心应用层协议,并不关心网络通信细节(TCP决定) 创建一个 TCP 的 socket, 同时在内核中创建一个 发送缓冲区 和一个 接收缓冲区; 调用 write...简单理解文件与socket的关系 创建一个套接字,底层其实创建了很多个结构体,并且层层指针叠加,互相指引。
TCP 协议段格式 理解TCP的报头: Linux 内核是C语言写的,在 UDP 说过报头是协议的表现,而协议本质就是结构体数据。所有 tcp报头 就是一个结构化或位段。...Linux 中 ( BSD Unix 和 Windows 也是如此), 超时以 500ms 为一个单位进行控制, 每次判定超时重发的超时时间都是 500ms 的整数倍....连接结构体:三次握手帮助创建连接结构体,存储连接状态和相关参数。...参数控制,这与客户端重发 FIN 报文的重传次数控制方式是一样的 ④ 第四次挥手失败,发生如下: 在 Linux 系统中,TIME_WAIT状态会持续 2MSL 后才会进入关闭状态 3....面向字节流 创建一个 TCP 的 socket, 同时在内核中创建一个 发送缓冲区 和 一个 接收缓冲区 1、调用 write 时, 数据会先写入发送缓冲区中; 如果发送的字节数太长, 会被拆分成多个
那么今天我们就开始另外一个套接字,TCP的使用吧! 值得一提的是,二者的使用其实有很大的相似程度,我们本篇文章主要还是通过创建一个简单的TcpServer为主。...=std::make_unique(); tcp_ptr->InitServer(); tcp_ptr->Start(); return 0; } 可以看见我们这里是没有定义一个默认的...我们要传进去的就是之前bind的文件描述符,注意,一定要是: 通过 socket(AF_INET, SOCK_STREAM, 0) 创建的 流式套接字(TCP)。...我们之前创建的文件描述符与现在的返回值文件描述符的关系也是这样的。 之前创建的文件描述符就相当于在拉客,每一个返回值文件描述符的产生就是他拉到客人了,随后叫出来迎接的对应的一个服务员。...,必须通过 socket(AF_INET, SOCK_STREAM, 0) 创建的 TCP 套接字。
netstat -nat|grep -i "80"|wc -l 查看80的 统计httpd协议的连接数 ps -ef |grep httpd|wc -l 统计状...
一、TCP实现回显服务器 1、服务端 (一)TcpServer.hpp #include #include #include #include...defaultip) : listensock_(defaultfd), port_(port), ip_(ip) {} void InitServer() { //IPv4协议,TCP...(new TcpServer(port)); tcp_svr->InitServer(); tcp_svr->Start(); return 0; } 2、客户端 TcpClient.cpp...TCP套接字描述符 int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { std::cerr...创建子进程后子进程关闭监听描述符,再创建一个“孙子”进程,然后子进程退出,此时孙子进程成为孤儿进程,被系统领养,再进行其他的工作,工作完成后关闭描述符,退出时由系统回收 父进程关闭新创建的描述符,然后父进程进入进程等待
创建与删除软链接的方法如下: 在linux下,使用ln命令创建、删除软链接。...例如: ln -s /home/zhenwx/htccode-v1/ /home/zhenwx/htccode 以上建立/home/zhenwx/htccode-v1 的软连接 linux...zhenwx/htccode-v1/ /home/zhenwx/htccode 其中/home/zhenwx/htccode-v1/为源文件,/home/zhenwx/htccode 为链接文件名,创建软链接后...注意:执行cd命令时,/home/zhenwx/htccode-v1/ 目录应已建立,不要创建目录/home/zhenwx/htccode/。
目标 创建一个admin用户用于日常操作(root权限太高,不宜直接使用)。...创建新用户 adduser [用户名] [root@VM_0_8_centos ~]# adduser admin 设置密码 passwd [用户名] 系统对密码有一定要求,不能太简单,不然。。。...[root@VM_0_8_centos ~]# 用新用户登录 用刚创建的用户登陆一下试试。...在/home/admin/.ssh目录下创建一个文件authorized_keys,然后把希望被信任的电脑的公钥输入进去,多个换行隔开即可。
转载自:https://www.cnblogs.com/lclq/p/5741852.html Linux命令(1)-创建文件 1.可以使用cat创建一个新的文件 命令:cat>>filename...当文件不存在时,则创建一个新的文件。touch只能创建空文件。 touch filename 以当前时间作为访问和修改时间属性值创建一个文件。 ...3.创建连接文件 Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。...在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。...Linux使用ln命令创建连接文件,可以使用ln –help查看ln命令使用说明。
Linux磁盘涉及到的命令不是很多,但是在实际运维中的作用却很大,因为Linux系统及业务都会承载到硬盘上。如果磁盘使用和配置不合理,可能会引起系统无法启动或者业务系统无法提供预期的服务。...主要从以下几个方面来介绍: 1.分区介绍 2.创建分区(本章节) 3.MBR&GPT 4.格式化&挂载 5.inode&硬连接 6.磁盘操作命令 7.小结 基于已经有一块磁盘的情况下...0 disk sr0 11:0 1 942M 0 rom 1.开始分区 [root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux...Device does not contain a recognized partition table 使用磁盘标识符 0x898f0efa 创建新的 DOS 磁盘标签。...the partition table w write table to disk and exit x extra functionality (experts only) 3.创建新分区
那么从本文开始呢,我们介绍TCP协议,TCP协议相对于UDP协议来说要复杂很多,所以我们大概分为两到三篇文章介绍。 本文主要介绍:TCP的字段,确认应答机制,捎带应答机制,连接管理机制。...首部长度 首部长度在TCP中的作用是用来表示TCP的报头有多长,可以表明数据部分是从多少开始的,因为报头的最小长度是20字节,即不带任何选项。...三次握手初始化 状态维护 ✅ snd_nxt / snd_una / rcv_nxt等核心状态 超时重传机制 对于超时重传机制,我们后续结合实际的策略介绍,这里我们记住,服务端发送了报文但是没有收到应答,Linux...TCP为什么是三次握手 那么关于TCP三次握手能引发的问题有很多,经典问题:为什么TCP是三次握手而不是一次二次?...当然了,还有关于TCP三次握手还有很多常见的问题,就留给读者自行探索了~ 比如,为什么TCP不是四次五次握手呢?
如何在 Linux 上安装 tcpping 测量到远程主机的网络延迟的一种常用方法是使用ping应用程序。该ping工具依赖 ICMP ECHO 请求和回复数据包来测量远程主机的往返延迟。...如果远程主机正在侦听该端口,它将以 TCP ACK 数据包响应。否则,它将以 TCP RST 数据包响应。...在 Linux 上安装tcpping tcpping作为 shell 脚本实现,该脚本响应外部工具来执行和报告 RTT 测量。因此,为了安装tcpping,你首先需要先安装这些先决条件。...但是,如果你tcpping在最小 Linux 运行时环境(例如Docker容器、AWS 最小映像 AMI)中运行,则bc可能不会预先安装。在这种情况下,你需要bc自己安装。...在Debian 的 Linux 上安装: $ sudo apt-get install bc 在 Red Hat 的 Linux 上安装: $ sudo yum install bc 安装 tcpping
利用 Vagrant 快速搭建 linux 虚拟机 下载并安装 VM VirtualBox 官方下载地址 传送门 微云下载 传送门 安装过程同普通软件安装一样,选择安装路径即可 下载并安装 Vagrant