Advertisement
Guest User

Untitled

a guest
May 27th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. #include <winsock.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, int **argv)
  9. {
  10. WSADATA wsda; // informacja zwrocona przez WSAStartup
  11. struct hostent *host; // informacja o serwerze
  12. char szMessage[80]; // komunikat
  13. int iMessageLen;
  14. int ret;
  15. char szInBuffer[128];
  16. int iBufferLen;
  17. char szAddress[64];
  18. int iPort;
  19.  
  20. SOCKET s; // uzywane gniazdo
  21. SOCKADDR_IN addr; // adres hosta
  22.  
  23.  
  24. // pobranie adresu IP
  25. cout << "Podaj adres IP do ktorego wyslac (np. 127.0.0.1) ...";
  26. cin.getline(szAddress,64,'\n');
  27.  
  28. // port na ktorym sie komunikujemy (0...65535)
  29. iPort = 1000;
  30.  
  31.  
  32. // zaladuj WinSock w wersji 2.2
  33. WSAStartup(MAKEWORD(2,2), &wsda);
  34.  
  35. // stworzenie gniazda TCP
  36. s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
  37.  
  38. // sprawdzenie bledu
  39. if(s == SOCKET_ERROR)
  40. {
  41. cout << "Blad przy inicjalizacji gniazda : " << WSAGetLastError() << endl;
  42. system("PAUSE");
  43. exit(1);
  44. }
  45.  
  46. // informacja o hoscie
  47. addr.sin_family = AF_INET;
  48. addr.sin_port = htons(iPort);
  49. addr.sin_addr.s_addr = inet_addr(szAddress);
  50.  
  51. if(addr.sin_addr.s_addr == INADDR_NONE) // jesli nie podano numeru IP, to odnajdz go z DNS
  52. {
  53. host = NULL;
  54. cout << "Szukam hosta..." << endl;
  55. host = gethostbyname(szAddress); // pobierz numer IP i go zachowaj
  56. if(host == NULL)
  57. {
  58. cout << "Nieznany host." << endl;
  59. system("PAUSE");
  60. exit(1);
  61. }
  62. memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
  63. cout << "OK." << endl;
  64. }
  65.  
  66. // laczenie z serwerem
  67. cout << "Laczenie z hostem " << szAddress << " na porcie " << iPort << endl;
  68. ret = connect(s, (struct sockaddr *) &addr, sizeof(addr));
  69.  
  70. // sprawdzenie bledu
  71. if(ret == SOCKET_ERROR)
  72. {
  73. cout << "Blad przy laczeniu z serwerem : " << WSAGetLastError() << endl;
  74. system("PAUSE");
  75. exit(1);
  76. }
  77. //pczatek
  78.  
  79. // pobranie komunikatu do bufora
  80. cout << "Wpisz komunikat ...";
  81. cin.getline(szMessage,80,'\n');
  82.  
  83. // dlugosc komunikatu
  84. iMessageLen = strlen(szMessage);
  85. // wyslanie komunikatu
  86. cout << "Wysylanie pakietu..." << endl;
  87. ret = send(s, szMessage, iMessageLen, 0);
  88.  
  89. // sprawdzenie bledu
  90. if(ret == SOCKET_ERROR)
  91. {
  92. cout << "Blad przy wysylaniu komunikatu : " << WSAGetLastError() << endl;
  93. system("PAUSE");
  94. exit(1);
  95. }
  96.  
  97. // odbior komunikatu zwrotnego
  98. cout << "Oczekiwanie na komunikat zwrotny..." << endl;
  99. ret = recv(s, szInBuffer, sizeof(szInBuffer), 0);
  100.  
  101. // sprawdzenie bledu
  102. if(ret == SOCKET_ERROR)
  103. {
  104. cout << "Blad przy odbiorze komunikatu zwrotnego : " << WSAGetLastError() << endl;
  105. system("PAUSE");
  106. exit(1);
  107. }
  108.  
  109. // wyswietlenie komunikatu zwrotnego
  110. iBufferLen = ret;
  111. szInBuffer[iBufferLen] = '\0';
  112. cout << "Otrzymano komunikat o tresci \"" << szInBuffer << "\" od hosta " << szAddress << endl;
  113. //koniec petli
  114. // zamkniecie gniazda
  115. closesocket(s);
  116.  
  117. // zamkniecie WinSock
  118. WSACleanup();
  119.  
  120. system("PAUSE");
  121.  
  122. return 0;
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement