当前位置:首页 > 单片机 > C语言与CPP编程
[导读]在掌握了基于TCP的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于C语言进行面向过程的函数封装,然后再基于C进行面向对象的类封装。1.基于C语言的封装基于TCP的套接字通信分为两部分:服务器端通信和客户端通信。我们只要掌握了通信...

在掌握了基于 TCP 的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于 C 语言进行面向过程的函数封装,然后再基于 C 进行面向对象的类封装。

1. 基于 C 语言的封装

基于 TCP 的套接字通信分为两部分:服务器端通信和客户端通信。我们只要掌握了通信流程,封装出对应的功能函数也就不在话下了,先来回顾一下通信流程:

服务器端

  • 创建用于监听的套接字
  • 将用于监听的套接字和本地的 IP 以及端口进行绑定
  • 启动监听
  • 等待并接受新的客户端连接,连接建立得到用于通信的套接字和客户端的 IP、端口信息
  • 使用得到的通信的套接字和客户端通信(接收和发送数据)
  • 通信结束,关闭套接字(监听 通信)

客户端

  • 创建用于通信的套接字
  • 使用服务器端绑定的 IP 和端口连接服务器
  • 使用通信的套接字和服务器通信(发送和接收数据)
  • 通信结束,关闭套接字(通信)

1.1 函数声明

通过通信流程可以看出服务器和客户端有些操作步骤是相同的,因此封装的功能函数是可以共用的,相关的通信函数声明如下:

/////////////////////////////////////////////////// 
//////////////////// 服务器 ///////////////////////
///////////////////////////////////////////////////
int bindSocket(int lfd, unsigned short port);
int setListen(int lfd);
int acceptConn(int lfd, struct sockaddr_in *addr);

/////////////////////////////////////////////////// 
//////////////////// 客户端 ///////////////////////
///////////////////////////////////////////////////
int connectToHost(int fd, const char* ip, unsigned short port);

/////////////////////////////////////////////////// 
///////////////////// 共用 ////////////////////////
///////////////////////////////////////////////////
int createSocket();
int sendMsg(int fd, const char* msg);
int recvMsg(int fd, char* msg, int size);
int closeSocket(int fd);
int readn(int fd, char* buf, int size);
int writen(int fd, const char* msg, int size);
关于函数 readn()writen() 的作用请参考TCP数据粘包的处理

1.2 函数定义

// 创建监套接字
int createSocket()
{
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    if(fd == -1)
    {
        perror("socket");
        return -1;
    }
    printf("套接字创建成功, fd=%d\n", fd);
    return fd;
}

// 绑定本地的IP和端口
int bindSocket(int lfd, unsigned short port)
{
    struct sockaddr_in saddr;
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(port);
    saddr.sin_addr.s_addr = INADDR_ANY;  // 0 = 0.0.0.0
    int ret = bind(lfd, (struct sockaddr*)
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

当地时间 9 月 8 日,SpaceX 与 EchoStar 正式达成一项价值 170 亿美元的频谱交易,SpaceX 将收购 EchoStar 旗下 AWS-4 频段(2GHz 频段)及 H 频段的频谱许可证,此举引发...

关键字: SpaceX EchoStar 星链 通信

全球半导体封装市场正向PLP、ECP等先进技术倾斜,以应对5G和高性能计算需求。但国内上规模的PLP厂商不超过五家,芯友微凭借技术创新和成本优势已占据一席之地。面对行业竞争和终端需求波动,张博威认为:“机会永远都在,关键...

关键字: PLP ECP 封装 芯友微 XINYOUNG

在半导体封装领域,BGA(球栅阵列)封装技术凭借其高引脚密度、低电阻电感和优异散热性能,已成为高性能芯片的主流封装形式。然而,随着芯片集成度与功率密度的持续提升,BGA焊点中的裂纹与微孔缺陷逐渐成为制约产品可靠性的核心问...

关键字: BGA裂纹 半导体 封装

上海2025年8月20日 /美通社/ -- 今日,全球领先的集成电路成品制造和技术服务提供商长电科技(600584.SH)公布了2025年半年度报告。财报显示,今年上半年长电...

关键字: 封装 长电科技 系统集成 汽车电子

在现代工业和汽车领域,控制器局域网(CAN)总线作为一种可靠且高效的通信方式,广泛应用于各种电子设备之间的数据传输。在 CAN 总线系统中,有一个看似毫不起眼却至关重要的元件 ——120Ω 终端电阻。这个小小的电阻,对于...

关键字: 控制器局域网 总线 通信

8月14日消息,今天,国务院新闻办公室举行“高质量完成‘十四五’规划”系列主题新闻发布会,国家数据局介绍“十四五”时期数字中国建设发展成就。

关键字: 算力 通信

北京2025年8月8日 /美通社/ -- 8月7日,浪潮信息发布面向万亿参数大模型的超节点AI服务器"元脑SD200"。该产品基于浪潮信息创新研发的多主机低延迟内存语义通信架构,以开放系统设计向上扩展...

关键字: 模型 节点 SD 通信

在现代通信技术的复杂网络中,射频(RF)滤波器犹如一位幕后英雄,虽鲜少被大众提及,却发挥着举足轻重的作用。从我们日常使用的智能手机,到构建通信基础设施的基站,再到新兴的物联网设备,RF 滤波器无处不在,默默保障着信号的顺...

关键字: 射频 滤波器 通信

在当今数字化时代,5G 通信技术以前所未有的速度改变着我们的生活,从高速的数据传输到实时的物联网应用,5G 的影响力无处不在。然而,在这一系列令人瞩目的技术背后,有一个常常被忽视却至关重要的角色 —— 晶振。它如同幕后的...

关键字: 通信 数据传输 晶振
关闭