#include <stdio.h> #include <time.h> #include <strings.h> #include <ctype.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #include <sys/socket.h> #include <arpa/inet.h> typedef struct sock_info{ int cfd; struct sockaddr_in clie_addr; int num; }s_info; void print_error(const char *msg) { perror(msg); exit(1); } void *get_msg(void *arg) { s_info *s = (s_info *)arg; char ipbuf[BUFSIZ] = {}; inet_ntop(AF_INET,&s->clie_addr.sin_addr.s_addr,ipbuf,sizeof(ipbuf)); int n,i,port; port = ntohs(s->clie_addr.sin_port); printf("new client join ip:%s port:%d number:%d\n",ipbuf,port,s->num); char buffer[BUFSIZ]; while(1) { bzero(buffer,0); n = read(s->cfd,buffer,sizeof(buffer)); if (n == 0) { printf("client ip:%s num:%d exit\n",ipbuf,s->num); break; } time_t t; time(&t); struct tm *tm = localtime(&t); printf("ip:%s:%d %2d-%2d %2d:%2d:%2d\n%s\n",ipbuf,port, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, buffer); for(i = 0;i<n;i++) buffer[i] = toupper(buffer[i]); write(s->cfd,buffer,n); } close(s->cfd); free(s); return NULL; } int main(int argc,char **argv) { int sfd = socket(AF_INET,SOCK_STREAM,0); if (sfd == -1) { print_error("socket"); } struct sockaddr_in serv_addr,clie_addr; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(8888); //serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); inet_pton(AF_INET,"192.168.2.144",&serv_addr.sin_addr.s_addr); int result = bind(sfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)); if (result == -1) { print_error("bind"); } result = listen(sfd,128); if (result == -1) { print_error("listen"); } int i = 0; while(1) { socklen_t clie_addr_len = sizeof(clie_addr); int cfd = accept(sfd,(struct sockaddr *)&clie_addr,&clie_addr_len); if (cfd == -1) { print_error("accept"); } s_info *clie_sock = (s_info *)malloc(sizeof(s_info)); clie_sock->cfd = cfd; clie_sock->clie_addr = clie_addr; clie_sock->num = i++; pthread_t id; pthread_create(&id,NULL,(void *)get_msg,(void *)clie_sock); pthread_detach(id); } return 0; }
linux c tcp多线程并发服务端
猜你喜欢
转载自blog.csdn.net/qq_31629063/article/details/80694109
今日推荐
周排行