3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
LINUX C++ 多執行序 網路 (LINUX multi thread socket server)   資料來源:http://www.tidytutorials.com/2010/06/linux-c-socket-example-with-client.html   LinServer.cpp #include #include #include #include #include #include #include #include #include #include #include void* SocketHandler(void*); int main(int argv, char** argc){     int host_port= 1101;     struct sockaddr_in my_addr;     int hsock;     int * p_int ;     int err;     socklen_t addr_size = 0;     int* csock;     sockaddr_in sadr;     pthread_t thread_id=0;     hsock = socket(AF_INET, SOCK_STREAM, 0);     if(hsock == -1){         printf(“Error initializing socket %d\n”, errno);         goto FINISH;     }          p_int = (int*)malloc(sizeof(int));     *p_int = 1;              if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||         (setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){         printf(“Error setting options %d\n”, errno);         free(p_int);         goto FINISH;     }     free(p_int);     my_addr.sin_family = AF_INET ;     my_addr.sin_port = htons(host_port);          memset(&(my_addr.sin_zero), 0, 8);     my_addr.sin_addr.s_addr = INADDR_ANY ;          if( bind( hsock, (sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){         fprintf(stderr,”Error binding to socket, make sure nothing else is listening on this port %d\n”,errno);         goto FINISH;     }     if(listen( hsock, 10) == -1 ){         fprintf(stderr, “Error listening %d\n”,errno);         goto FINISH;     }     //Now lets do the server stuff     addr_size = sizeof(sockaddr_in);          while(true){         printf(“waiting for a connection\n”);         csock = (int*)malloc(sizeof(int));         if((*csock = accept( hsock, (sockaddr*)&sadr, &addr_size))!= -1){             printf(“———————\nReceived connection from %s\n”,inet_ntoa(sadr.sin_addr));             pthread_create(&thread_id,0,&SocketHandler, (void*)csock );             pthread_detach(thread_id);         }         else{             fprintf(stderr, “Error accepting %d\n”, errno);         }     }      FINISH: ; } void* SocketHandler(void* lp){     int *csock = (int*)lp;     char buffer[1024];     int buffer_len = 1024;     int bytecount;     memset(buffer, 0, buffer_len);     if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){         fprintf(stderr, “Error receiving data %d\n”, errno);         goto FINISH;     }     printf(“Received bytes %d\nReceived string \”%s\”\n”, bytecount, buffer);     strcat(buffer, ” SERVER ECHO”);     if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){         fprintf(stderr, “Error sending data %d\n”, errno);         goto FINISH;     }          printf(“Sent bytes %d\n”, bytecount); FINISH:     free(csock);     return 0; }     LinClient.cpp #include #include #include #include #include #include #include #include #include #include int main(int argv, char** argc){     int host_port= 1101;     char* host_name=”127.0.0.1″;     struct sockaddr_in my_addr;     char buffer[1024];     int bytecount;     int buffer_len=0;     int hsock;     int * p_int;     int err;     hsock = socket(AF_INET, SOCK_STREAM, 0);     if(hsock == -1){         printf(“Error initializing socket %d\n”,errno);         goto FINISH;     }          p_int = (int*)malloc(sizeof(int));     *p_int = 1;              if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||         (setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){         printf(“Error setting options %d\n”,errno);         free(p_int);         goto FINISH;     }     free(p_int);     my_addr.sin_family = AF_INET ;     my_addr.sin_port = htons(host_port);          memset(&(my_addr.sin_zero), 0, 8);     my_addr.sin_addr.s_addr = inet_addr(host_name);     if( connect( hsock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){         if((err = errno) != EINPROGRESS){             fprintf(stderr, “Error connecting socket %d\n”, errno);             goto FINISH;         }     }     //Now lets do the client related stuff     buffer_len = 1024;     memset(buffer, ‘\0’, buffer_len);     printf(“Enter some text to send to the server (press enter)\n”);     fgets(buffer, 1024, stdin);     buffer[strlen(buffer)-1]=’\0′;          if( (bytecount=send(hsock, buffer, strlen(buffer),0))== -1){         fprintf(stderr, “Error sending data %d\n”, errno);         goto FINISH;     }     printf(“Sent bytes %d\n”, bytecount);     if((bytecount = recv(hsock, buffer, buffer_len, 0))== -1){         fprintf(stderr, “Error receiving data %d\n”, errno);         goto FINISH;     }     printf(“Recieved bytes %d\nReceived string \”%s\”\n”, bytecount, buffer);     close(hsock);      FINISH: ; }     g++ -o server LinServer.cpp -lpthread g++ -o client LinClient.cpp      

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦