Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. #include <sys/stat.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h> // struct sockaddr_in, htons, htonl
  5.  
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <unistd.h>
  9. #include <netdb.h> // struct hostent, gethostbyname()
  10. #include <string.h>
  11.  
  12. #include "stream.h" // MAX_BLOCK_SIZE, readn(), writen()
  13. #define SERV_TCP_PORT 40005 // default server listening port
  14.  
  15. void main(int argc, char *argv[]) {
  16.  
  17. int sd, n, nr, nw, i=0;
  18. char buf[MAX_BLOCK_SIZE], host[60];
  19. unsigned short port;
  20. struct sockaddr_in ser_addr; struct hostent *hp;
  21.  
  22. // Get server host name and port number
  23. // assume server running on the local host and on default port
  24. if (argc == 1) {
  25. gethostname(host, sizeof(host));
  26. port = SERV_TCP_PORT;
  27. // use the given host name
  28. } else if (argc == 2) {
  29. strcpy(host, argv[1]);
  30. port = SERV_TCP_PORT;
  31. // use given host and port for server
  32. } else if (argc == 3) {
  33. strcpy(host, argv[1]);
  34. int n = atoi(argv[2]);
  35. if (n >= 1024 && n < 65536) {
  36. port = n;
  37. } else {
  38. printf("Error: server port number must be between 1024 and 65535\n");
  39. exit(1);
  40. }
  41. } else {
  42. printf("Usage: %s [ <server host name> [ <server listening port> ] ]\n", argv[0]);
  43. exit(1);
  44. }
  45.  
  46. // get host address, & build a server socket address
  47. bzero((char *) &ser_addr, sizeof(ser_addr));
  48. ser_addr.sin_family = AF_INET;
  49. ser_addr.sin_port = htons(port);
  50. if ((hp = gethostbyname(host)) == NULL) {
  51. printf("host %s not found\n", host);
  52. exit(1);
  53. }
  54. ser_addr.sin_addr.s_addr = * (u_long *) hp->h_addr;
  55.  
  56. // create TCP socket & connect socket to server address
  57. sd = socket(PF_INET, SOCK_STREAM, 0);
  58. if (connect(sd, (struct sockaddr *) &ser_addr, sizeof(ser_addr)) < 0) {
  59. perror("Client: Connect Error");
  60. exit(1);
  61. }
  62.  
  63. while (++i) {
  64. printf("Client Input[%d]: ", i);
  65. fgets(buf, sizeof(buf), stdin); nr = strlen(buf);
  66.  
  67. if (buf[nr-1] == '\n') {
  68. buf[nr-1] = '\0';
  69. --nr;
  70. }
  71.  
  72. if (strcmp(buf, "quit") == 0) {
  73. printf("Bye from client\n");
  74. exit(0);
  75. }
  76.  
  77. if (nr > 0) {
  78. if ((nw=writen(sd, buf, nr)) < nr) {
  79. printf("Client: Send Error\n");
  80. exit(1);
  81. }
  82.  
  83. if ((nr=readn(sd, buf, sizeof(buf))) <= 0) {
  84. printf("Client: Receive Error\n");
  85. exit(1);
  86. }
  87.  
  88. buf[nr] = '\0';
  89. printf("Server Output[%d]: %s\n", i, buf);
  90. }
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement