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即可,测试可用。