Advertisement
Guest User

asd

a guest
Nov 18th, 2017
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <string>
  4.  
  5. #define BUFSIZE 1000
  6.  
  7. using namespace std;
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11. WORD wVersionRequested = MAKEWORD(1,1); // Èíslo verze
  12. WSADATA data; // Struktura s info. o knihovnì;
  13. std::string text, ret = "", splitter = ": ";
  14. sockaddr_in sockName; // "Jméno" soketu a èíslo portu
  15. sockaddr_in clientInfo; // Klient, který se pøipojil
  16. SOCKET mainSocket; // Soket
  17. int port; // Èíslo portu
  18. char buf[BUFSIZE]; // Pøijímací buffer
  19. int size; // Poèet pøijatých a odeslaných bytù
  20. int addrlen; // Velikost adresy vzdáleného poèítaèe
  21. int count = 0; // Poèet pøipojení
  22. bool end = true;
  23.  
  24. if (argc != 2)
  25. {
  26. cerr << "Syntaxe:\n\t" << argv[0]
  27. << " " << "port" << endl;
  28. return -1;
  29. }
  30. // Pøipravíme sokety na práci
  31. if (WSAStartup(wVersionRequested, &data) != 0)
  32. {
  33. cout << "Nepodarilo se inicializovat sockety" << endl;
  34. return -1;
  35. }
  36. port = atoi(argv[1]);
  37. // Vytvoøíme soket
  38. if ((mainSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))
  39. == INVALID_SOCKET)
  40. {
  41. cerr << "Nelze vytvorit socket" << endl;
  42. WSACleanup();
  43. return -1;
  44. }
  45. // Zaplníme strukturu sockaddr_in
  46. // 1) Rodina protokolù;
  47. sockName.sin_family = AF_INET;
  48. // 2) Èíslo portu, na kterém èekáme
  49. sockName.sin_port = htons(port);
  50. // 3) Nastavení IP adresy lokální síové karty, pøes kterou
  51. // je možno se pøipojit.
  52. // Nastavíme možnost pøipojit se odkudkoliv.
  53. sockName.sin_addr.s_addr = INADDR_ANY;
  54. //pøiøadíme soketu jméno
  55. if (bind(mainSocket, (sockaddr *)&sockName, sizeof(sockName))
  56. == SOCKET_ERROR)
  57. {
  58. cerr << "Problem s pojmenovanim socketu." << endl;
  59. WSACleanup();
  60. return -1;
  61. }
  62. // Vytvoøíme frontu požadavkù na spojení.
  63. // Vytvoøíme frontu maximální velikosti 10 požadavkù.
  64. if (listen(mainSocket, 10) == SOCKET_ERROR)
  65. {
  66. cerr << "Problem s vytvorením fronty" << endl;
  67. WSACleanup();
  68. return -1;
  69. }
  70. do
  71. {
  72. // Poznaèím si velikost struktury clientInfo.
  73. // Pøedám to funkci accept.
  74. addrlen = sizeof(clientInfo);
  75. // Vyberu z fronty požadavek na spojení.
  76. // "client" je nový soket spojující klienta se serverem.
  77. SOCKET client = accept(mainSocket, (sockaddr*)&clientInfo,
  78. &addrlen);
  79. int totalSize = 0;
  80. if (client == INVALID_SOCKET)
  81. {
  82. cerr << "Problem s prijetim spojeni" <<endl;
  83. WSACleanup();
  84. return -1;
  85. }
  86. // Zjistím IP adresu klienta.
  87. cout << "Nekdo se pripojil z adresy: "
  88. << inet_ntoa((in_addr)clientInfo.sin_addr) << endl;
  89. // Pøijmu data. Ke komunikaci s klientem používám soket
  90. //"client"
  91. text = "";
  92.  
  93. if ((size = recv(client, buf, BUFSIZE - 1, 0))
  94. == SOCKET_ERROR)
  95. {
  96. cerr << "Problem s prijetimm dat." << endl;
  97. WSACleanup();
  98. return -1;
  99. }
  100. cout << "Prijato: " << size << endl;
  101. totalSize += size;
  102. text += buf;
  103.  
  104. cout << text;
  105. if(text == "*shutdown*\n"){
  106. end = false;
  107. text = "*Spojeni ukonceno*";
  108. }
  109. ret += inet_ntoa((in_addr)clientInfo.sin_addr) + splitter + text;
  110. // Odešlu pozdrav
  111. if ((size = send(client, ret.c_str(), ret.size() + 1, 0)) == -1)
  112. {
  113. cerr << "Problem s odeslanim dat" << endl;
  114. WSACleanup();
  115. return -1;
  116. }
  117. cout << "Odeslano: " << size << endl;
  118. // Uzavøu spojení s klientem
  119. closesocket(client);
  120. }while (end);
  121. cout << "Koncim" << endl;
  122. closesocket(mainSocket);
  123. WSACleanup();
  124. return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement