代码:
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <pthread.h>
#include <stdlib.h>
int startup()
{
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0)
{
exit(1);//退出进程
}
int opt = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_port = htons(8080); // 指定固定端口
int ret = bind(sock,(struct sockaddr *)&local,sizeof(local));
if( ret < 0 )
{
exit(2);
}
if( listen(sock,5) < 0 )
{
exit(3);
}
return sock;
}
#define HTTP_HEAD1 "HTTP/1.1 200 ok"
#define HTTP_HEAD2 "Content-Type:application/json"
#define HTTP_DATA "{\
\"AC\":\"default\",\
\"MAC\":\"xx.xx.xx.xx.xx.xx\",\
\"IP\":\"192.68.83.105/24\"\
}"
void* handler_request(void * arg)
{
int sock = (int)arg;
char buf[4896];
char echo_buf[4096] = {0};
ssize_t s = read(sock,buf,sizeof(buf)-1);
if( s > 0 )
{
buf[s] = 0;
printf(" %s ",buf);
snprintf(echo_buf, 4096, "%s\n%s\nContent-Length:%d\n\n%s\n",
HTTP_HEAD1, HTTP_HEAD2, strlen(HTTP_DATA), HTTP_DATA);
const char *echo_str = "HTTP/1.1 200 ok\nContent-Type: text/plain\nContent-Length: 10\n\n1234567890\n\n";
printf("-------------\n");
printf(" %s ",echo_buf);
write(sock,echo_buf,strlen(echo_buf));
}
close(sock);
}
int main()
{
int listen_sock = startup();
while(1)
{
struct sockaddr_in client;
socklen_t len = sizeof(client);
int sock = accept(listen_sock,(struct sockaddr*)&client,&len);
if(sock < 0)
{
continue;
}
pthread_t tid;
pthread_create(&tid,NULL,handler_request,(void *)sock);
pthread_detach(tid);
}
return 0;
}
网友评论