3.2.4 C代码实现

客户端后台代码如下:

客户端后台代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <sys/types.h> #include <sys/wait.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netdb.h> #include <sys/stat.h> //监听端口8090,以实际为准 #define PORT 8090 // 缓冲区最大字节数 #define MAXDATASIZE 1024 int main(int argc, char **argv) { int sockfd, csock; int apilen, numbytes; int res; char buf[MAXDATASIZE]; char *apistr=NULL; struct sockaddr_in server_addr,client_addr; if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket error"); exit(1); } memset(&server_addr, 0, sizeof(struct sockaddr_in)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = htonl(INADDR_ANY); res = bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)); if (res < 0){ printf("server bind tcp socket fail\n"); return 0; } res = listen(sockfd,10); if (res < 0){ printf("server listen tcp socket fail\n"); return 0; } apilen = sizeof(struct sockaddr_in); while(1){ csock = accept(sockfd,(struct sockaddr *)&client_addr,&apilen); if (csock <= 0){ printf("server accept tcp socket fail\n"); close(sockfd); return 0; } printf("server tcp from %s\n", inet_ntoa(client_addr.sin_addr)); memset(buf, 0, MAXDATASIZE); numbytes = recv(csock,buf, MAXDATASIZE,0); if(numbytes<=0){ printf("recv failure\n"); close(csock); continue; } close(csock); apistr = strstr(buf, "\r\n\r\n"); if(apistr){ printf("recv api event or cdr etc:\n %s\n",apistr); //开启新线程处理事件、话单或其他信息 } } close(sockfd); return 0; }


可以保存成helloworld.c文件,编译:gcc –g –o helloworld helloworld.c,生成可执行文件helloworld。然后直接运行./helloworld即可,测试可用。

results matching ""

    No results matching ""