TCP服务器的编写(下)

我们现在开始对我们的客户端开始封装

我们的客户端,创建完套接字,需不需要bind呢??

当然是不需要的,你本身是一个客户端,其他人写的应用也可能是客户端,如果我们bind,一定意味着我们当前客户端进程绑定的一定是一个非常具体的端口号,一旦绑定的是一个具体的端口号,换而言之,A客户端,B客户端,是由不同的软件公司提供的,那么这里绑定的端口号,有可能在不经过商量的情况下,冲突,那么就势必会有某一个客户端启动不起来!!

那么我们不需要显示的bind,但是一定是需要port

需要让我们的操作系统自动进行port的选择

但是客户端一定要有连接别人的能力  ---connect

connect返回值  连接成功返回0  失败-1被返回,错误码被设置

因为connect是系统调用接口,所有OS在connect的时候会自动的给我们的客户端绑定当前客户端的IP和端口

------------------------------------------------------------------------------------------------------------------------

 

这样,我们的客户端初型差不多就完成了,我们现在可以来简单测试一下

现在客户端发的所有消息,服务器全部都能收到,服务器会把收到的消息转会给客户端,完成一个数据的通路

接下来我们基于这一份基本的代码,来做下一步的完善

这时候父进程就不在回收资源的任务,就交给OS去回收

-------------------------------------------------------------------------------------------------------------------------------

但是创建进程的成本太高了,毕竟进程是承担系统资源分配的实体

所有我们可以试着采用多线程版本

在多线程这里用不用进程关闭特定的文件描述符呢??

不需要,多进程当中每个进程都有文件描述符表,但是在多线程这里每一个线程,和我们的主线程是会共享文件描述符表的!!!!

--------------------------------------------------------------------------------------------------------------------------------

可是每一次过来呢,来了一个新链接,我们去创建新线程去处理, 每一次,创建一个线程成本也挺高的,我们呢,能不能预先创建一批线程,链接到来时,把整个的链接包装成任务,把他投递到后端的消息队列当中,挑选出特定的一个线程去处理

线程池版本

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Javaweb之Mybatis入门的详细解析

Mybatis入门 前言 在前面我们学习MySQL数据库时,都是利用图形化客户端工具(如:idea、datagrip),来操作数据库的。 在客户端工具中,编写增删改查的SQL语句,发给MySQL数据库管理系统,由数据库管理系统执行S…

CentOS7安装部署Zookeeper

文章目录 CentOS7安装部署Zookeeper一、前言1.简介2.架构3.集群角色4.特点5.环境 二、正文1.部署服务器2.基础环境1)主机名2)Hosts文件3)关闭防火墙4)JDK 安装部署 3.单机部署1)下载和解压2)配置文件3&…

linux文件夹介绍

在linux内核文件夹下面存在着许多文件夹,那么那些文件夹是什么用处呢,下面将为你介绍。 (1)documentation 这个文件夹下没有内核代码,仅仅有一套实用的文档,但这些文档的质量不一。比如内核文档的文件系统,在该文件夹下…

动态路由传参与查询参数传参详情

动态路由传参 路由规则path :/article/:aid 组件获取参数: this. $route. params.aid 如果想要所有的值,就用this. $route. params 注意:这两个必须匹配 如果是多个参数,path :/article/:aid/:name就写两个参数 接收方式一: 在…

Javaweb-servlet

一、servlet入门 1.Servlet介绍 (1)什么是Servlet Servlet是Server Applet的简称,是用Java编写的是运行在 Web 服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#…

Python武器库开发-武器库篇之Git的分支使用(三十九)

武器库篇之Git的分支使用(三十九) Git分支是一种用于在项目中并行开发和管理代码的功能。分支允许开发人员在不干扰主要代码的情况下创建新的代码版本,以便尝试新功能、修复错误或独立开发功能。一般正常情况下,开发人员开发一个软件,会有两…

C#使用条件语句判断用户登录身份

目录 一、示例 二、生成 利用条件语句判断用户登录身份,根据用户登录身份的不同,给予相应的操作权限。 一、示例 主要用if语句及ComboBox控件。其中,ComboBox是窗体中的下拉列表控件,在使用ComboBox控件前,可以先向…

数据结构与算法(五)

文章目录 数据结构与算法(五)33 与哈希函数有关的结构33.1 哈希函数33.2 布隆过滤器33.3 一致性哈希34 资源限制类题目的解题套路34.1 1G内存40亿个无符号整数的文件中找到出现次数最多的数34.2 内存限制为3KB,但是只用找到一个没出现过的数34.3 100亿个URL的大文件中找出其…

《深入理解JAVA虚拟机笔记》并发与线程安全原理

除了增加高速缓存之外,为了使处理器内部的运算单元能尽量被充分利用,处理器可能对输入代码进行乱序执行(Out-Of-Order Execution)优化。处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果一致&#…

分库分表之Mycat应用学习四

4 分片策略详解 分片的目标是将大量数据和访问请求均匀分布在多个节点上,通过这种方式提升数 据服务的存储和负载能力。 4.1 Mycat 分片策略详解 总体上分为连续分片和离散分片,还有一种是连续分片和离散分片的结合,例如先 范围后取模。 …

深度学习中的感知机

感知机是一种判别模型,其目标是求得一个能够将数据集中的正实例点和负实例点完全分开的分离超平面。 感知机在1957年由弗兰克罗森布拉特提出,是支持向量机和神经网络的基础。感知机是一种二类分类的线性分类模型,输入为实例的特征向量&#x…

TOGAF架构开发方法

TOGAF针对架构开发方法定义了一系列阶段和步骤,这些阶段和步骤对架构的迭代过程进行了详细、标准的描述。 企业架构的项目过程 一、预备阶段(Preliminary) 1、目标 预备阶段的目标是: 对组织的背景和环境进行审查(调…

适应变化:动态预测在机器学习中的作用

一、介绍 机器学习 (ML) 中的动态预测是指随着新数据的出现而不断更新预测的方法。这种方法在从医疗保健到金融等各个领域越来越重要,其中实时数据分析和最新预测可以带来更好的决策和结果。在本文中,我将讨论机器学习中动态预测的概念、其优势、挑战以及…

Fiddler Classic 实现汉化

安装:https://www.telerik.com/fiddler/fiddler-classichttps://www.telerik.com/fiddler/fiddler-classic 汉化 链接:https://pan.baidu.com/s/1wWgVqrXlh0Gjpbwlg6pPNA 提取码:xq9t 下载到本地之后,得到了两个文件 FdToChinese…

【jdk与tomcat配置文件夹共享防火墙设置(入站出站规则)】

目录 一、jdk与tomcat配置 1.1 jdk配置 1.2 tomcat配置 二、文件夹共享 2.1 为什么需要配置文件夹共享功能 2.2 操作步骤 2.2.1 高级共享 2.2.2 普通共享 2.3 区别 三、防火墙设置(入站规则&出站规则) 3.1 入站规则跟出站规则 3.2 案例…

ssrf之gopher协议的使用和配置,以及需要注意的细节

gopher协议 目录 gopher协议 (1)安装一个cn (2)使用Gopher协议发送一个请求,环境为:nc起一个监听,curl发送gopher请求 (3)使用curl发送http请求,命令为 …

YOLOv8改进 | 2023注意力篇 | EMAttention注意力机制(附多个可添加位置)

一、本文介绍 本文给大家带来的改进机制是EMAttention注意力机制,它的核心思想是,重塑部分通道到批次维度,并将通道维度分组为多个子特征,以保留每个通道的信息并减少计算开销。EMA模块通过编码全局信息来重新校准每个并行分支中…

竞赛保研 基于机器学习与大数据的糖尿病预测

文章目录 1 前言1 课题背景2 数据导入处理3 数据可视化分析4 特征选择4.1 通过相关性进行筛选4.2 多重共线性4.3 RFE(递归特征消除法)4.4 正则化 5 机器学习模型建立与评价5.1 评价方式的选择5.2 模型的建立与评价5.3 模型参数调优5.4 将调参过后的模型重…

Peter算法小课堂—浮点数危机

大家先想想下面这个代码运行结果&#xff1a; #include <bits/stdc.h> using namespace std; int main(){double x5.2;double y4.11.1;cout<<(x<y)<<endl;cout<<x-y<<endl;return 0; } 最终发现&#xff0c; &#xff1f;&#xff1f;&…

【数据结构】八、查找

一、基本概念 静态查找&#xff1a;只查找&#xff0c;不改变集合内数据元素 动态查找&#xff1a;有则输出元素&#xff0c;无则添加元素 二、静态查找表 2.1顺序查找 在线性表、链表、树中依次查找 2.2折半查找&#xff08;二分查找&#xff09; 在有序的线性表中&…
最新文章