TCP服务器的编写(下)

2023-12-31 05:34:01

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

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

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

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

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

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

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

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

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

?

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

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

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

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

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

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

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

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

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

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

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

线程池版本

文章来源:https://blog.csdn.net/m0_69126768/article/details/135027161
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。