C语言的socket封装库-waisock编程简介

本文介绍了waisock,一个稳定的socket封装库,适用于C语言开发者。通过简单易用的8个核心函数,包括初始化、运行、停止和销毁等,waisock能帮助减少socket编程的复杂性和错误,支持TCP连接、监听、发送和关闭操作。此外,它还提供了回调函数处理接收数据等事件,为开发者提供了一套完整的socket编程接口。
摘要由CSDN通过智能技术生成

       socket编程,要做的质量稳定可靠,对市场上90%的开发人员来说,是一项难度极高的工作,它要求对C/C++中的多线程、各种锁、事件等机制应用非常熟练,同时对socket中的阻塞,尤其是非阻塞机制非常熟悉,尤其需要几年的亲身实战经验。要做好socket开发,需要至少5年的开发经验,否则开发出的socket通信程序一定是质量不稳定、多条连接之间相互影响、通信偶尔停顿、甚至是莫名其妙死掉等严重问题,用户体验差,很多失败的项目原因都在此处。如果socket开发经验不足,不如直接使用别人封装好的socket封装类,站在巨人的肩膀上,开发出的软件质量有保证。本文就简要介绍waisock这一个socket封装类。

   waisock是socket编程中一个非常优秀的封装类,稳定可靠,经过很多年的发展,并经过了多个项目的实践检验,而且性能卓越,每秒可以收发近100万个包。可以同时既作为socket的服务端,又作为socket的客户端使用,而且还同时支持SSL连接。核心函数只有8个,分为两类。

第一类是控制主程序的运行类,共四个函数,分别是:

WaiSock_Create()  -- 初始化,生成句柄。
WaiSock_Run()  -- 使用生成的句柄,启动程序的主流程执行。根据所带参数的不同,该函数可以以阻塞的方式运行,也可以启动一个线程并在线程中单独运行。
WaiSock_StopIt() -- 发送通知,以停止主流程或线程的执行,为退出前做准备。
WaiSock_Destroy() -- 释放句柄内存,退出。

以上四个函数,是waisock类的控制主流程,程序员

最新版Socket编程,后面带有程序实例,并通过调试,可以直接编译运行;希望对大家有帮助。代码设计服务端、客户端socket实例,设计IPV4、IPV6的实例代码。 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。 部分代码(服务器): #include #include #include #include #include #include #include #include #define SERVPORT 3333 /*服务器监听端口号 */ #define BACKLOG 10 /* 最大同时连接请求数 */ main() { int sockfd,client_fd; /*sockfd:监听socket;client_fd:数据传输socket */ struct sockaddr_in my_addr; /* 本机地址信息 */ struct sockaddr_in remote_addr; /* 客户端地址信息 */ if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror( "socket创建出错!"); exit(1); } my_addr.sin_family=AF_INET; my_addr.sin_port=htons(SERVPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero( &(my_addr.sin_zero),8); if (bind(sockfd, (struct sockaddr *) &my;_addr, sizeof(struct sockaddr)) == -1) { perror( "bind出错!"); exit(1); } if (listen(sockfd, BACKLOG) == -1) { perror( "listen出错!"); exit(1); } while(1) { sin_size = sizeof(struct sockaddr_in); if ((client_fd = accept(sockfd, (struct sockaddr *) &remote;_addr, &sin;_size)) == -1) { perror( "accept出错"); continue; } printf( "received a connection from %s\n", inet_ntoa(remote_addr.sin_addr)); if (!fork()) { /* 子进程代码段 */ if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1) perror( "send出错!"); close(client_fd); exit(0); } close(client_fd); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值