Guest User

Untitled

a guest
Oct 19th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.33 KB | None | 0 0
  1. /*
  2. // -- multiplexing client - v1.0, by dono (2011)
  3. */
  4.  
  5. // standard includes
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9.  
  10. // socket
  11. #include <unistd.h>
  12. #include <sys/socket.h>
  13. #include <sys/types.h>
  14. #include <netinet/in.h>
  15. #include <arpa/inet.h>
  16. #include <netdb.h>
  17.  
  18. #define MAX 1024
  19. #define MIN 128
  20.  
  21. // prototypes
  22. int wait_for_data(int sock);
  23.  
  24. // global variables
  25. char in_buffer[MAX];
  26. char out_buffer[MAX];
  27. char user_input[MAX];
  28. int result, loop =1;
  29.  
  30. // global socket variables
  31. int sock, server_port;
  32. struct sockaddr_in server_addr;
  33. struct hostent *server;
  34.  
  35. int main(int argc, char *argv[])
  36. {
  37. // check for correct number of args
  38. if(argc != 4)
  39. {
  40. printf("usage: %s [server] [port] [handle]\n", argv[0]);
  41. exit(1);
  42. }
  43.  
  44. // assign address, and port; get hostname
  45. server = gethostbyname(argv[1]);
  46. server_port = atoi(argv[2]);
  47.  
  48. // set up remote server address structure
  49. memset(&server_addr, 0, sizeof(server_addr));
  50. server_addr.sin_family = AF_INET;
  51. bcopy((char *)server->h_addr, (char *) &server_addr.sin_addr.s_addr, server->h_length);
  52. server_addr.sin_port = htons(server_port);
  53.  
  54. // create client socket
  55. sock = socket(AF_INET, SOCK_STREAM, 0);
  56.  
  57. // connect to server socket
  58. connect(sock, (struct sockaddr *) &server_addr, sizeof(server_addr));
  59.  
  60. printf("Connecting to %s on port %d\n", argv[1], server_port);
  61.  
  62.  
  63. // display server greeting
  64. memset(in_buffer, 0, MAX);
  65. recv(sock, in_buffer, sizeof(in_buffer), 0);
  66. if((strcmp(in_buffer, "Welcome to the server!")) == 0)
  67. {
  68. printf("%s\n", in_buffer);
  69. }
  70. else
  71. {
  72. printf("No server answering!\n");
  73. close(sock);
  74. exit(1);
  75. }
  76.  
  77. // loop
  78. while(loop)
  79. {
  80. printf("[%s]: ", argv[3]);
  81. fgets(user_input, sizeof(user_input), stdin);
  82. sprintf(out_buffer, "[%s]: %s", argv[3], user_input);
  83. send(sock, out_buffer, sizeof(out_buffer), 0);
  84.  
  85. result = wait_for_data(sock);
  86. if(result < 0)
  87. loop = 0;
  88.  
  89. memset(in_buffer, 0, MAX);
  90. recv(sock, in_buffer, sizeof(in_buffer), 0);
  91. printf("%s", in_buffer);
  92. }
  93.  
  94. printf("Closing socket\n");
  95. close(sock);
  96.  
  97. return 0;
  98. }
  99.  
  100. int wait_for_data(int sock)
  101. {
  102. fd_set fd;
  103. int result = 0;
  104.  
  105. FD_ZERO(&fd);
  106. FD_SET(sock, &fd);
  107. result = select(sock+1, &fd, NULL, NULL, NULL);
  108. if(result == -1)
  109. return result;
  110. if(FD_ISSET(sock, &fd))
  111. return 1;
  112. return 0;
  113. }
Add Comment
Please, Sign In to add comment