Advertisement
Device-Cheat

C server client select()

Apr 23rd, 2020
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.19 KB | None | 0 0
  1. #C server client select()
  2.  
  3. https://github.com/shfx17
  4.  
  5. // server
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <errno.h>
  10. #include <sys/socket.h>
  11. #include <netinet/in.h>
  12. #include <string.h>
  13. #include <sys/types.h>
  14. #include <unistd.h>
  15. #include <signal.h>
  16. #define MAXLINE 100
  17. #define MAX 2
  18. char buff[MAXLINE];
  19. char recvline[MAXLINE+1];
  20. void main(void) {
  21. struct sockaddr_in servaddr, clientaddr; fd_set rset, allset;
  22. socklen_t size = 8;
  23. int maxi = -1, maxfd, sockfd, connfd, nready, clients[MAX], i,n;
  24. sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) {
  25. printf("Nie utworzono socketu!\n"); exit(0);
  26. } else {
  27. printf("*** Witamy w programie SERWERA! Utworzono socket! ***\n"); maxfd = sockfd;
  28. }
  29. bzero(&servaddr, sizeof(servaddr));
  30. servaddr.sin_family = AF_INET;
  31. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  32. servaddr.sin_port = htons(8070);
  33. if (bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0) {
  34. printf("Nie powiązano socketu!\n");
  35. exit(0);
  36. } else {
  37. printf("Powiązano socket pomyślnie!\n");
  38. }
  39. if(listen(sockfd, 5) != 0) {
  40. printf("Błąd nasłuchiwania zgłoszeń od klienta!\n"); exit(0);
  41. } else {
  42. printf("Nasłuchuje żądań klienta...\n"); for (i = 0; i < MAX; i++) {
  43. clients[i] = -1;
  44. }
  45. FD_ZERO(&allset); FD_SET(sockfd, &allset);
  46. }
  47. for( ; ;) {
  48. rset = allset;
  49. nready = select(maxfd + 1, &rset, NULL, NULL, NULL); if (FD_ISSET(sockfd, &rset)) {
  50. connfd = accept(sockfd, (struct sockaddr *)&clientaddr, &size); if(connfd < 0) {
  51. printf("Nie zaakceptowano żądania klienta!\n"); exit(0);
  52. } else {
  53. for (i = 0; i < MAX; i++) { if (clients[i] < 0) {
  54. clients[i] = connfd;
  55. printf("Zaakceptowano żądanie klienta numer: %d!\n", i+1);
  56. printf("Pozostało wolnych miejsc: %d!\n", MAX-(i+1)); sleep(1);
  57. break;
  58. }
  59. }
  60. }
  61. if (i == MAX) {
  62. printf("MAKSYMALNA ILOŚĆ KLIENTÓW TO %d!\n", MAX);
  63. }
  64. FD_SET(connfd, &allset);
  65. if (connfd > maxfd) maxfd = connfd; if (i > maxi) maxi = i;
  66. if (nready-- <= 0) continue;
  67. }
  68. // calculate_and_send(clients, &rset, &allset, maxi);
  69. int k;
  70. for(k = 0; k<=maxi ; k++){
  71. if(clients[k]<0) continue;
  72. if(FD_ISSET(clients[k],&rset)){
  73. while ( (n = read(connfd, recvline, MAXLINE)) > 0) {
  74. recvline[n] = 0;
  75. if (fputs(recvline, stdout) == EOF) puts("Wystapil blad");
  76. memset(buff, 0, sizeof(buff));
  77. int i, j;
  78. for(i = strlen(recvline) - 1, j = 0; i >= 0; i--, j++) {
  79. buff[j] = recvline[i];
  80. }
  81. buff[n] = 0;
  82. printf("Wysylam odpowiedz: %s\n", buff);
  83. write(connfd, buff, strlen(buff));
  84. }
  85. }
  86. }
  87. }
  88. if(close(sockfd) == -1) {
  89. printf("Błąd zamknięcia socketu!\n"); exit(0);
  90. } else {
  91. printf("Zamknięto socket!\n");
  92. }
  93. }
  94.  
  95.  
  96.  
  97.  
  98. //client
  99.  
  100. #include <netinet/in.h>
  101. #include <string.h>
  102. #include <sys/types.h>
  103. #include <unistd.h>
  104. #include <arpa/inet.h>
  105. #include <sys/ioctl.h>
  106. #include <signal.h>
  107. #define MAXLINE 100
  108. #include <stdio.h>
  109. #include <stdlib.h>
  110. struct sockaddr_in servaddr;
  111. int sockfd, maxclifd;
  112. fd_set rset, allset;
  113. char recvline[MAXLINE+1];
  114. char buff[MAXLINE];
  115. void wyslij (int sockfd, const char*c)
  116. {
  117. if(write(sockfd, c, strlen(c))<=0)
  118. puts("write error");
  119. printf("Wyslano dane do serwera: %s\n", c);
  120. }
  121. int sockfd, n,connfd;
  122. int main(){
  123. sockfd = socket(AF_INET, SOCK_STREAM, 0);
  124. if(sockfd < 0)
  125. puts("Blad socket");
  126. bzero(&servaddr, sizeof(servaddr));
  127. servaddr.sin_family = AF_INET;
  128. servaddr.sin_port = htons(8070);
  129. if(inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr)<0){
  130. puts("Blad inet_ption");
  131. }
  132. maxclifd = sockfd;
  133. FD_ZERO(&allset);
  134. FD_SET(sockfd, &allset);
  135. rset = allset;
  136. select(maxclifd + 1, NULL, &rset, NULL, NULL);
  137. if(FD_ISSET(sockfd, &rset)){
  138. if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
  139. puts("Blad connect");
  140. printf("Podaj ciag znakow\n");
  141. if (fgets(buff, sizeof(buff), stdin) != NULL) {
  142. printf("Wysylanie %s\n", buff);
  143. write(sockfd, buff, strlen(buff));
  144. } else printf("Blad wczytywania!\n");
  145. n = read(sockfd, recvline, MAXLINE);
  146. recvline[n]=0;
  147. if(fputs(recvline,stdout) == EOF)
  148. puts("Problem fputs error");
  149. if(n<0)
  150. puts("read error");
  151. if(close(sockfd)<0)
  152. puts("close error");
  153. n = read(sockfd, recvline, MAXLINE);
  154. recvline[n] = 0;
  155. printf("Otrzymalem: ");
  156. if (fputs(recvline, stdout) == EOF) puts("Blad odczytu z serwera");
  157. printf("\n");
  158. close(sockfd);
  159. }
  160. return 0;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement