socket 2---TCP编程

news2024/12/25 12:57:54

目录

一、TCP编程流程

二、函数接口

2.1、监听接口

 2.2、发起连接  connect

 2.3、接收新连接    accept

2.4、收发接口

三、代码实现

 问题:     要是创建多个客户端的话会怎么样呢?

那么怎么去真正解决这个问题呢?


一、TCP编程流程

 这里面需要注意的是:   三次握手成功之后,相当于客户端和服务端建立了tcp连接

还有重点重点重点:三次握手的过程是在内核当中完成的!!!,也就是说,三次握手的过程程序猿并没有写任何代码进行干预

二、函数接口

2.1、监听接口

int  listen(int sockfd ,  int  backlog  );

 2.2、发起连接  connect

int connect (int  sockfd,  const  struct  sockaddr  *addr, socklen_t  addrlen );

 2.3、接收新连接    accept

程序从已完成连接队列当中将完成三次握手的连接接收回来

接收成功的标志:服务端为该连接创建了套接字描述符 

int accept (int  sockfd,  struct  sockaddr  *addr,  socklen_t  *addrlen);

connect和accept之间的关系

 

 返回的新连接的套接字,是为了和客户端进行通信的,只不过这个套接字没有进行监听功能,同时有客户端的地址信息。


 多个客户端发起连接,在服务端会创建多个新连接的套接字


eg: 服务端使用socket创建的套接字描述符, 相当于是 “拉皮条的“ 侦听套接字,就在侦听是否有新连接到来

服务端使用accept创建出来的新连接套接字,相当于 “接客”的小红,新连接套接字,就是在同客户端通信的

2.4、收发接口

ssize_t  send(int  sockfd, const  void  *buf, size_t  len , int  flags );

  ssize_t  recv ( int sockfd ,  void  *buf ,  size_t  len , int  flags );

三、代码实现

我们先来写服务端

 我们这里先写到了listen,

1、这里我们可以通过telnet测试tcp是否监听成功,因为telnet可以向服务端发送连接请求,即三次握手

 当出现什么都没有的时候就说明连接建立了

然后我们再次使用netstat 去观察一下端口的状态,会发现多了一行的信息

 2、测试tcp,listen函数backlog,并发连接数的含义

并发连接数不等于tcp最大连接数

我们再来写客户端

 写完之后我们来运行一下看看

发现能够正常的进行通信了

 问题:     要是创建多个客户端的话会怎么样呢?

分析出现这种情况的原因:
首先,第二个客户端的代码能够执行到提示输入语句处,说明此时该客户端与服务端已经建立了连接。并且客户端发送数据后没有报错,说明客户端数据发送是成功的。因此问题肯定是出在服务端的代码。
                             我们可以通过netstat 命令来查看当前网络连接状态以及相关信息

 证明我们的服务端代码是没有进行accept接收第二个客户端的,那么怎样去解决呢?

我们来分析一下现在的代码:

 那么我们在循环当中加上accept能解决吗?

答案是不能

那么怎么去真正解决这个问题呢?

1、用多线程去解决

实现原理:

 多线程代码:

 

 

2、用多进程解决

多进程代码:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/173441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构与算法基础(王卓)(9):线性表的应用(有序表合并)(有序,可重复)

PPT:第二章P176; 合并为一个新的整体:有序表的合并(有序,可重复) 线性表: 对于该操作的具体实现的流程设计:(各模块) 创建一个空表C 依次从A或B(中&#…

移动云国产商用密码规模化应用

前言 为深入贯彻落实《密码法》,推动商用密码技术在工业和信息化行业领域的融合应用,工业和信息化部密码应用研究中心组织开展了“首届全国商用密码应用优秀案例征集”工作,并评审选出15项优秀案例。 同时,为持久发挥本次活动的…

CSAPP笔记

目录 第一章 一个典型的硬件组成 从键盘上读取hello指令​编辑 存储器结构示例 相对性能公式 计算机系统抽象 第二章--信息的表示和处理 按位 & | ^ ~ 与逻辑运算 && || 逻辑右移和算术右移 左移 定义计算机如何编码和操作整数的数学定义 补码编码的定义 补码…

【JavaWeb】前端开发三剑客之CSS(上)

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaWeb】 ✈️✈️本篇内容:CSS从零开始学习! 🚀🚀代码托管平台github:JavaWeb代码存放仓库! ⛵⛵作…

擎创动态 | 官宣!与深智城集团正式签约

近日,上海擎创信息技术有限公司与深圳市智慧城市科技发展集团有限公司(以下简称“深智城集团”)就“一体化协同办公平台项目”达成战略合作,签约仪式已圆满完成。 ​深智城集团副总经理罗介平、智城软件公司常务副总经理韩小宇、智…

android 读取assets配置文件

方法1-getAssets().open(“re.properties”) try {Properties props new Properties();props.load(getAssets().open("re.properties"));Log.e(TAG, "className:" props.getProperty("className"));} catch (IOException e) {e.printStackTrace…

支持加密的日记应用程序DailyTxT

本文完成于 12 月下旬,对应的版本为 1.0.10(2022_11_02); 什么是 DailyTxT ? DailyTxT 是一个加密的 Web 日记应用程序,用于写下您当天的故事并轻松地再次找到它们。它是用 Python Flask(后端)和 Vue.JS&am…

23种设计模式(十二)——外观模式【接口隔离】

外观模式 文章目录 外观模式意图什么时候使用外观真实世界类比外观模式的实现外观模式的优缺点亦称:Facade 意图 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容…

一直以来,人们都在探索互联网赋能实体的正确的途径和逻辑

一直以来,人们都在寻找互联网回归实体的正确的方式和方法;一直以来,人们都在探索互联网赋能实体的正确的途径和逻辑。然而,互联网似乎始终都游离于产业之外,似乎始终都超脱于产业之上。尽管经历了PC时代和移动互联网时…

分支预测详解

分支预测用于在微处理器中以流水线效率为目标来预测程序流。有许多方法来实现分支预测,通常在更好的预测结果和增加硬件做预测之间需要进行权衡。 目录 分支预测简介 静态分支预测 动态分支预测 启动分支预测 分支预测简介 要了解分支预测器,就不得…

QT当类有多个不同类型的同名信号时如何处理QOverload?

我们在设计类的信号时也许也会像设计类方法一样,给予多种不同参数类型的重载版本,这样一来我们就可以应对不同类型的参数输入或者输出。 但我们在使用有重载的信号版本时就不那么方便了,QT系统没有那么智能,不会自动匹配&#xff…

【实操案例三】进制转换、异常捕获、输出颜色设置、格式化字符串的设置等实例代码及运行效果图!

任务一:将指定的十进制数转换成二进制、八进制、十六进制 # 任务一:将指定的十进制数转换成二进制、八进制、十六进制 def fun():numint(input(请输入一个十进制整数:))print(num,的二进制数为:,bin(num)) # 第一种写法&#xff…

网线交叉、直连区别

欢迎来到东用知识小课堂!一.网线常识网线常用的有:双绞线、同轴电缆、光纤等。双绞线可按其是否外加金属网丝套的屏蔽层而区分为屏蔽双绞线(STP)和非屏蔽双绞线(UTP)。从性价比和可维护性出发,大…

golang语言websocket百万长链接

是简单demo测试 前端 <html> <head><title>Simple client</title><script type"text/javascript">var ws;function init() {// Connect to Web Socketws new WebSocket("ws://localhost:8866/ws");// Set event handlers…

联合证券|再创纪录,外资狂买超1000亿!券商、期货板块持续活跃

A股今天全线上扬&#xff0c;沪指小幅走高&#xff0c;创业板、科创50指数体现强势&#xff1b;港股走势疲弱&#xff0c;恒生科技指数一度跌超2%。 详细来看&#xff0c;两市股指盘中震动上扬&#xff0c;午后全线走高&#xff0c;创业板指、科创50指数涨超1%&#xff1b;到收…

PCB板缺陷检测识别系统 YOLOv7

PCB板缺陷检测识别系统通过YOLOv7网络深度学习技术&#xff0c;对现场PCB是否存在缺陷部分进行实时分析检测&#xff0c;当检测到PCB本身存在缺陷的时候&#xff0c;立即抓拍存档告警方便后期针对性的进行调整改。YOLO系列算法是一类典型的one-stage目标检测算法&#xff0c;其…

CSS+JS 折叠

文章目录CSSJS 折叠效果CSSjQuery 鼠标经过显示详细信息CSSJS 折叠效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>折叠效果</title><style type"text/css">.collapse-box {width: 500px;borde…

FMC子卡设计资料原理图:FMC177-基于AD9361的双收双发射频FMC子卡

FMC177-基于AD9361的双收双发射频FMC子卡一、板卡介绍 FMC177射频模块分别包含两个接收通道与发射通道&#xff0c;其频率可覆盖达到70MHz~6GHz&#xff0c;AD9361芯片提供具有成本效益的实验平台&#xff0c;具有达到56MHz的瞬时带宽&#xff0c;更高的灵敏度&#xff…

Java 23种设计模式(2.创建者模式-单例设计模式)

1. 创建者模式 创建型模式分为&#xff1a; 单例模式工厂方法模式抽象工程模式原型模式建造者模式 什么是创建者模式&#xff1f; 创建型模式的主要关注点是“怎样创建对象&#xff1f;”&#xff0c;它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度…

Windows 下 VS Code 远程连接 Ubuntu 并配置免密登录

文章目录1.安装 Visual Studio Code2.安装必要的插件3.为本机生成 SSH 密钥对4.将公钥拷贝到 Ubuntu 上5.配置 Remote 插件6.关闭远程连接7.卸载 Visual Studio Code7.1 在控制面板中找到 Visual Studio Code 将其卸载7.2 删除之前安装过的插件7.3 删除用户信息和缓存信息1.安装…