Socket-IO模型:初步模型

本文详细介绍了C++版本的TCP服务器代码,包括Socket的使用、InetAddress类处理IP和端口、Acceptor类的accept操作以及InitConnection类初始化链接流程。展示了如何通过类结构组织代码,实现功能模块化,便于管理和扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、基础的一个C++版本的服务器代码

        依照C语言服务器的基础流程进行更改,整个的TCP链接流程的实现:接上篇

Socket编程-IO模型-优快云博客

先上代码结构图,因为是示例

                        

1、首先,这个示例的基本流程就是使用Socket,创建sockfd,进行获取sockfd'等操作,供之后的流程使用

2、InetAddress : 这个文件中只做和地址相关的信息,比如初始化 IP,Port还有,获取IP信息等的操作方法(sockaddr_in  )。

3、Acceptor  :这个类文件里面只做和accept相关的操作,包括以下几个流程(基础功能,可以最终实现accept的操作)

        设定地址和断开可复用后,流程开始,注意哦,这几个都是这个类的类成员函数,基于基础的函数进行设置。

                绑定和监听。这在c语言流程中,监听之后就是accept了

        但是在这里,将accept单独的设定成这个类的成员函数,自己可以决定什么时候去调用accept功能

                        

        前面的内容就是根据基本的流程更改后,C++版本的实现,我们只需要创建对象,进行调用各函数就可以了,功能实现也是函数之间的相互联系和嵌套。

4、InitConnetion :  这个就是对整体的链接进行操作和控制,(而创建一个对象,就相当于是创建了一个链接,然后我们执行这个链接所包含的操作),每个链接都是不同的。

与之类似的,就是这些类凸显了细分的功能:每一个功能,我们都将它设定成了对应的类,当我们需要创建大量的链接时,基于这些类创建出我们需要的对象,不同对象执行不同的操作。这里最明显的就是InetConnection ,可以使用其创建不同的对象,那么不同的对象是不是意味着不同的链接。只不过本例。只能实现单链接,其他的后面写。下面上代码

5、其中ProcessIO ,是为了进行程序的IO操作,读写功能的实现。

//写这个的时候,更多的还是注意类功能的实现和整体实现目标结构的设定(比如这里,就是服务器,就按照服务器结构来就行),不要盯着某一个成员函数的功能去看。我们需要调用谁,实现什么功能,就在合适的时候将它调用出来就行。

因为C++类的特征明显,每个类都是要解决一部分相关问题和操作的(类似这个,类的不同对应着服务器流程中的不同阶段或者某一模块功能)

其他代码也一样。之前看过很多代码文件命名不清晰或者名字相近还没有说明,只有一堆代码,也没有注释,理解上有歧义的情况下,特容易导致方向上的错误,看起来就太累了。

//这个可能写的也不太好。。后面多改进,在核心主线的基础上,拓展功能

代码示例:

Socket:

#ifndef __SOCKET_H__
#define __SOCKET_H__

#include "NonCopyable.h"

class Socket
: NonCopyable
{
public:
    Socket();
    explicit Socket(int fd);
    ~Socket();
    int fd() const;
    void shutDownWrite();

private:
    int _fd;
};

#endif
#include "Socket.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>

Socket::Socket()
{
    _fd = ::socket(AF_INET, SOCK_STREAM, 0);
    if(_fd < 0)
    {
        perror("socket");
        r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值