现在的位置: 首页 > 综合 > 正文

tcp并发服务器之线程

2014年02月11日 ⁄ 综合 ⁄ 共 2240字 ⁄ 字号 评论关闭

 关于进程和线程的知识,请看我相关的简单博文,不足之处,请之处,相互学习
////tcp并发服务器之线程
1 #include <stdio.h>
  2 #include <sys/time.h>
  3 #include <sys/types.h>
  4 #include <unistd.h>
  5 #include <fcntl.h>
  6 
  7 #include <sys/types.h>          /* See NOTES */
  8 #include <sys/socket.h>
  9 #include <netinet/in.h>
 10 #include <arpa/inet.h>
 11 #include <signal.h>
 12 
 13 #include <string.h>
 14 
 15 #include <pthread.h>
 16 
 17 #define PORT    6543
 18 
 19 int init_socket(int port)
 20 {
 21         /*创建套接字,用于连接*/
 22         int s = socket(AF_INET, SOCK_STREAM, 0);
 23         if(0 > s){
 22         int s = socket(AF_INET, SOCK_STREAM, 0);
 23         if(0 > s){
 24                 perror("socket");
 25                 return -1;
 26         }
 27 
 28         /*端口重用*/
 29         int reuseaddr = 1;
 30         if(0 > setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, 

sizeof(re    useaddr))){
 31                 perror("setsockopt");
 32                 return -1;
 33         }
 34 
 35         /*绑定server IP及端口号*/
 36         struct sockaddr_in addr;
 37         memset(&addr, 0, sizeof(struct sockaddr_in));
 38         addr.sin_family = AF_INET;
 39         addr.sin_port = htons(port);
 40         addr.sin_addr.s_addr = htonl(INADDR_ANY);
 41 
 42         socklen_t addrlen = sizeof(struct sockaddr_in);
 43         if(0 > bind(s, (struct sockaddr *)&addr, addrlen)){
 44                 perror("bind");
 45                 return -1;
 46         }
 47 
 48         /*设置监听数*/
 49         listen(s, 10);
 50 
 51         return s;
 52 }
 53 
 54 void* rountine(void *arg)
 55 {
 56         int s = (int) arg;
 57         while(1){
 58                 #define MAX 64
 59                 char buf[MAX];
 60                 bzero(buf, MAX);
 61                 int ret = read(s, buf, MAX);
 62                 if(0 >= ret){
 63                         printf("---leave-%d-\n", s);
 64                         close(s);
 65                         return NULL;
 66                 }
 67 
 68                 printf("RECV:%s[%d]\n", buf, ret);
 69         }
 70 
 71         return (void*)0;
 72 }
 73 
 74 int main()
 75 {
 76         int s = init_socket(PORT);
 77         if(0 > s){
 78                 return -1;
 79         }
 80 
 81         struct sockaddr_in addr;
 82         memset(&addr, 0, sizeof(struct sockaddr_in));
 83         socklen_t addrlen = sizeof(struct sockaddr_in);
 84 
 85         while(1){
 86                 int clients = accept(s, (struct sockaddr *)&addr, 

&addrlen);
 87                 if(0 > clients){
 88                         return -1;
 89                 }
 90 
 91                 printf("New connect: SOCKET[%d], %s:%d\n",\
 92                          clients, inet_ntoa(addr.sin_addr), ntohs

(addr.sin_p    ort));
 93 
 94                 pthread_t tid;
 95                 pthread_create(&tid, NULL, rountine, (void*)

clients);
 96         }
 97 
 98         exit(0);
 99         return 0;
100 }
101 

【上篇】
【下篇】

抱歉!评论已关闭.