libsocket网络函数库

来源:互联网 发布:网络视听节目审核员 编辑:程序博客网 时间:2024/05/21 14:00

自己写的基于事件驱动模型的网络函数库,使用非常方便。

当有数据可读时,系统就会调用用户注册的函数。
当有新的客户连接时,系统就会调用用户注册的函数。

源码下载地址:https://sourceforge.net/projects/libsocketc/


测试代码如下:

#include "libsocket.h"#include <signal.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <stdbool.h>#define PORT 8888#define UDP_TEST   0#define TCP_C_TEST 1#define TCP_S_TEST 2// 修改下面的数字,选择你要测试的项目。修改后,重新执行make,即可运行test#define TEST 0bool QUIT = false;void handle(int sig){if (sig == SIGINT)QUIT = true;}// 有数据可读,将调用此函数static void readCallback(Socket *sp){int n;char buf[1024] = {0};n = readSocket(sp, buf, 1000);if (n == 0){printf("The peer had shutdown\n");return;}printf("------------------------------\n");if (TEST == UDP_TEST){printf("read from %s:%d\n", inet_ntoa(sp->pAddr.sin_addr), ntohs(sp->pAddr.sin_port));writeSocket(sp, buf, strlen(buf) + 1, W_PEER);// 向对端地址发送数据(用于UDP)//writeSocket(sp, buf, strlen(buf) + 1, W_DST);// 向指定的目标地址发送数据(用于UDP)}else if (TEST == TCP_C_TEST){printf("read from %s:%d\n", inet_ntoa(sp->dAddr.sin_addr), ntohs(sp->dAddr.sin_port));writeSocket(sp, buf, strlen(buf) + 1, 0);}else if (TEST == TCP_S_TEST){printf("read from %s:%d\n", inet_ntoa(sp->pAddr.sin_addr), ntohs(sp->pAddr.sin_port));writeSocket(sp, buf, strlen(buf) + 1, 0);}printf("%s\n", buf);}#if TEST == TCP_S_TEST// 当有新的客户连接时,将调用此函数static void callbackAccept(Socket *sp){Socket *sp_c = acceptSocket(sp, readCallback);printf("New connection:%s:%d\n", inet_ntoa(sp_c->pAddr.sin_addr), ntohs(sp_c->pAddr.sin_port));}#endifint main(int argc, char **argv){signal(SIGINT, handle);// 初始化libsocketlibSocketInit();// UDP Test#if TEST == UDP_TESTprintf("UDP Test\n");if (argc != 3){fprintf(stderr, "Usage:%s ip port\n", argv[0]);return -1;}// 创建数据报套接字Socket *sp = createSocket(SOCK_DGRAM, SOCKET_BROADCAST, readCallback);if (sp == NULL)return -1;// 指定要发送的目标地址if (connectSocket(sp, argv[1], atoi(argv[2])) < 0)return -1;// 绑定本地端口listenSocket(sp, PORT);printf("listen on %d\n", PORT);#elif TEST == TCP_C_TEST// TCP Client Testint n, fd;char buf[1024] = {0};printf("Tcp Client Test\n");if (argc != 3){fprintf(stderr, "Usage:%s ip port\n", argv[0]);return -1;}// 创建流式套接字Socket *sp = createSocket(SOCK_STREAM, 0, readCallback);if (sp == NULL)return -1;// 连接指定的服务器if (connectSocket(sp, argv[1], atoi(argv[2])) < 0)return -1;#elif TEST == TCP_S_TEST// TCP Server Testprintf("Tcp Server Test\n");// 创建流式套接字Socket *sp = createSocket(SOCK_STREAM, 0, callbackAccept);if (sp == NULL)return -1;// 绑定本地端口,并监听listenSocket(sp, 8888);printf("listen on %d\n", PORT);#endifwhile (!QUIT)sleep(1);sleep(1);// 释放libsocket资源 libSocketDeinit();printf("quit\n");return 0;}


1 0
原创粉丝点击