Advertisement
Guest User

sv2

a guest
Jul 21st, 2015
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <errno.h>
  5. #include <string.h>
  6. #include <netdb.h>
  7. #include <sys/types.h>
  8. #include <netinet/in.h>
  9. #include <sys/socket.h>
  10. #include <arpa/inet.h>
  11. #include <cstdio>
  12. #include <vector>
  13. #include <pthread.h>
  14. #include <iostream>
  15. #include <signal.h>
  16. #include <sys/select.h>
  17. #include <sys/time.h>
  18. #include <time.h>
  19.  
  20.  
  21. using namespace std;
  22.  
  23. #define PORTOS 8889
  24. #define SERWER_IP "127.0.0.1"
  25. #define MSG_LENGTH 512
  26. int max_new_connect,activity;
  27.  
  28.  
  29.  
  30. struct arg
  31. {
  32. int ile;
  33. bool zamknac;
  34. }my_arg;
  35.  
  36. void handler(int signal)
  37. {
  38. my_arg.zamknac = 1;
  39. return;
  40. }
  41.  
  42. void *threads_connection(void * emma)
  43. {
  44.  
  45. char msg[MSG_LENGTH];
  46. struct arg *my_arg;
  47. my_arg = (struct arg *)emma;
  48. int polaczenie,read_size;
  49. polaczenie = my_arg->ile;
  50. fd_set rfds;
  51. struct timeval tv;
  52. int retval,maxfd;
  53.  
  54. FD_ZERO(&rfds);
  55. FD_SET(polaczenie,&rfds);
  56. tv.tv_sec = 5;
  57. tv.tv_usec = 0;
  58. maxfd = polaczenie;
  59. cout<<"polaczenie: "<<polaczenie<<endl;
  60. //dajmy tutaj wynik dzialania selecta
  61. //retval = select(maxfd+1,&rfds,NULL,NULL,&tv);
  62.  
  63. while((retval = select(maxfd+1,&rfds,NULL,NULL,&tv))>=0 && my_arg->zamknac!=1 )
  64. {
  65. if(retval>0)
  66. {
  67. read_size = recv(polaczenie,msg,512,0);
  68. write(polaczenie,msg,read_size);
  69. memset(msg,'\0',sizeof(msg));
  70. }
  71. if(read_size == 0 && retval > 0) // tutaj podac dane clientra do wiswietlenia
  72. {
  73. puts("Client disconnected");
  74. fflush(stdout);
  75. }
  76. else if(read_size==-1)
  77. {
  78. perror("recv failed**");
  79. }
  80.  
  81. tv.tv_sec = 5;
  82. //retval=0;
  83. }
  84. if(retval<0)
  85. cout<<"mam jakis blad selecta"<<endl;
  86.  
  87. if(my_arg->zamknac==1)
  88. {
  89. cout<<"wszedlem do break"<<endl;
  90. close(polaczenie);
  91. pthread_exit((void *)retval);
  92.  
  93. }
  94.  
  95. cout<<"tutaj juz mnie nie ma"<<endl;
  96. close(polaczenie);
  97. return NULL;
  98. }
  99.  
  100.  
  101.  
  102. int main()
  103. {
  104.  
  105. struct sockaddr_in server_addr;
  106. socklen_t laddr_len;
  107. pthread_t thread1;
  108. my_arg.zamknac=0;
  109. int new_connect =0;
  110. int my_socket_server,result;
  111. int iret1;
  112. struct sigaction sa;
  113. sa.sa_handler = handler;
  114. sigfillset(&(sa.sa_mask));
  115. sa.sa_flags=0;
  116. sigaction(SIGINT,&sa,0);
  117.  
  118. if((my_socket_server= socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
  119. {
  120. perror("socket error! ");
  121. return 1;
  122. }
  123.  
  124. memset(&server_addr,0,sizeof(struct sockaddr));
  125.  
  126. server_addr.sin_family = AF_INET;
  127. server_addr.sin_port = htons(PORTOS);
  128. server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  129.  
  130.  
  131. if((result = bind(my_socket_server, (struct sockaddr*)&server_addr,sizeof(struct sockaddr)))<0)
  132. {
  133. close(my_socket_server);
  134. perror("Bind eRroR");
  135. return 1;
  136. }
  137.  
  138.  
  139. if(( result = listen(my_socket_server,5))<0)
  140. {
  141. perror("listen error");
  142. return 1;
  143. }
  144.  
  145. laddr_len = sizeof(struct sockaddr);
  146.  
  147.  
  148. while(1)
  149. {
  150. cout<<"tu jestem 0"<<endl;
  151. while((new_connect=accept(my_socket_server, (struct sockaddr*)&server_addr,&laddr_len))==0);
  152.  
  153. printf("tu jestem1");
  154. my_arg.ile = new_connect;
  155. iret1 = pthread_create(&thread1,NULL,threads_connection,(void *)&my_arg);
  156. if(iret1)
  157. {
  158. fprintf(stderr,"Error - pthread_create return code : %d\n",iret1);
  159. exit(EXIT_FAILURE);
  160. }
  161. printf("mamy nowego uzytkownika!!\n");
  162.  
  163. new_connect =0;
  164. }
  165.  
  166.  
  167. close(new_connect);
  168. close(my_socket_server);
  169.  
  170. return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement