Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/types.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9.  
  10. const char* HOST = "192.168.1.19";
  11. const unsigned short int PORT = 55555; // Max is 65,535
  12. const int BUFFER_SIZE = 1024 * 4; // 4kB
  13.  
  14. int main(int argc, char** argv) {
  15. int doorBell_sock = socket(AF_INET, SOCK_STREAM, 0);
  16. if(doorBell_sock == -1){
  17. std::cerr << "Couldn't create socket!" << std::endl;
  18. return -1;
  19. }
  20. sockaddr_in hint;
  21. hint.sin_family = AF_INET;
  22. hint.sin_port = htons(PORT); // Convert port number bytes to small endian just in case
  23. inet_aton(HOST, &hint.sin_addr); // Bind to any available IP address
  24. int _bind = bind(doorBell_sock, (sockaddr*) &hint, sizeof(hint));
  25. if(_bind == -1){
  26. std::cerr << "Couldn't bind socket!" << std::endl;
  27. return -1;
  28. }
  29. int _listen = listen(doorBell_sock, SOMAXCONN);
  30. if(_listen == -1){
  31. std::cerr << "Couldn't listen on socket!" << std::endl;
  32. return -1;
  33. }
  34. sockaddr_in client_addr;
  35. socklen_t client_addr_size = sizeof(client_addr);
  36. int client_sock = accept(doorBell_sock, (sockaddr*) &client_addr, &client_addr_size);
  37. if(client_sock == -1){
  38. std::cerr << "Couldn't accept user connection!" << std::endl;
  39. return -1;
  40. }
  41. close(doorBell_sock);
  42. std::cout << inet_ntoa(client_addr.sin_addr) << " Connected to server" << std::endl;
  43. char buffer[BUFFER_SIZE];
  44. while(true){
  45. memset(buffer, 0, BUFFER_SIZE);
  46. int bytes_recv = recv(client_sock, buffer, BUFFER_SIZE, 0);
  47. if(bytes_recv == -1){
  48. std::cerr << "Couldn't read message!" << std::endl;
  49. break;
  50. }else if(bytes_recv == 0){
  51. std::cout << "client disconnected" << std::endl;
  52. break;
  53. }
  54. std::string msg = std::string(buffer, 0, bytes_recv - 2);
  55. if(msg == "quit"){
  56. break;
  57. }
  58. std::cout << inet_ntoa(client_addr.sin_addr) << ": " << msg << std::endl;
  59. send(client_sock, buffer, bytes_recv + 1, 0);
  60. }
  61. close(client_sock);
  62. return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement