|
本帖最后由 zjhsucceed_329 于 2014-3-29 00:21 编辑
自己写的网络函数库,使用非常方便。
当有数据可读时,系统就会调用用户注册的函数。
当有新的客户连接时,系统就会调用用户注册的函数。
源码下载地址:
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 0
- bool 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));
-
- }
- #endif
- int main(int argc, char **argv)
- {
-
- signal(SIGINT, handle);
-
- // 初始化libsocket
- libSocketInit();
-
- // UDP Test
- #if TEST == UDP_TEST
-
- printf("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 Test
- int 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 Test
-
- printf("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);
- #endif
- while (!QUIT)
- sleep(1);
-
- sleep(1);
- // 释放libsocket资源
- libSocketDeinit();
- printf("quit\n");
- return 0;
- }
复制代码
|
|