TCPClient.cpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include "TCPClient.h"
  2. TCPClient::TCPClient()
  3. {
  4. sock = -1;
  5. port = 0;
  6. address = "";
  7. }
  8. bool TCPClient::setup(string address , int port)
  9. {
  10. if(sock == -1)
  11. {
  12. sock = socket(AF_INET , SOCK_STREAM , 0);
  13. if (sock == -1)
  14. {
  15. cout << "Could not create socket" << endl;
  16. }
  17. }
  18. if((signed)inet_addr(address.c_str()) == -1)
  19. {
  20. struct hostent *he;
  21. struct in_addr **addr_list;
  22. if ( (he = gethostbyname( address.c_str() ) ) == NULL)
  23. {
  24. herror("gethostbyname");
  25. cout<<"Failed to resolve hostname\n";
  26. return false;
  27. }
  28. addr_list = (struct in_addr **) he->h_addr_list;
  29. for(int i = 0; addr_list[i] != NULL; i++)
  30. {
  31. server.sin_addr = *addr_list[i];
  32. break;
  33. }
  34. }
  35. else
  36. {
  37. server.sin_addr.s_addr = inet_addr( address.c_str() );
  38. }
  39. server.sin_family = AF_INET;
  40. server.sin_port = htons( port );
  41. if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
  42. {
  43. perror("connect failed. Error");
  44. return false;
  45. }
  46. return true;
  47. }
  48. bool TCPClient::Send(string data)
  49. {
  50. if(sock != -1)
  51. {
  52. if( send(sock , data.c_str() , strlen( data.c_str() ) , 0) < 0)
  53. {
  54. cout << "Send failed : " << data << endl;
  55. return false;
  56. }
  57. }
  58. else
  59. return false;
  60. return true;
  61. }
  62. string TCPClient::receive(int size)
  63. {
  64. char buffer[size];
  65. memset(&buffer[0], 0, sizeof(buffer));
  66. string reply;
  67. if( recv(sock , buffer , size, 0) < 0)
  68. {
  69. cout << "receive failed!" << endl;
  70. return nullptr;
  71. }
  72. buffer[size-1]='\0';
  73. reply = buffer;
  74. return reply;
  75. }
  76. string TCPClient::read()
  77. {
  78. char buffer[1] = {};
  79. string reply;
  80. while (buffer[0] != '\n') {
  81. if( recv(sock , buffer , sizeof(buffer) , 0) < 0)
  82. {
  83. cout << "receive failed!" << endl;
  84. return nullptr;
  85. }
  86. reply += buffer[0];
  87. }
  88. return reply;
  89. }
  90. void TCPClient::exit()
  91. {
  92. close( sock );
  93. }