Advertisement
Guest User

labudp_klient

a guest
Mar 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <winsock.h>
  3. #include <iostream>
  4. #include <vector>
  5. #include <sstream>
  6.  
  7. #pragma comment (lib,"ws2_32.lib")
  8. using namespace std;
  9.  
  10. struct wspolrzedne
  11. {
  12. double x, y;
  13. };
  14.  
  15. void parseData(stringstream &konwerter, wspolrzedne &wsp, int i)
  16. {
  17.  
  18. while (i--)
  19. {
  20.  
  21. string buff, value1, value2;
  22. konwerter >> buff;
  23. if (i == 1)
  24. {
  25.  
  26. value1 = buff.substr(buff.find('(') + 1, buff.find(",") - 1);
  27. //buff = buff.substr(0, buff.find('('));
  28. wsp.x = atof(value1.c_str());
  29.  
  30. }
  31. if (i == 0)
  32. {
  33. value2 = buff.substr(buff.find(' ') + 1, buff.find(")") - buff.find(" ") - 1);
  34. wsp.y = atof(value2.c_str());
  35. }
  36. }
  37.  
  38. }
  39.  
  40. int main()
  41. {
  42. WSADATA wsaData;
  43.  
  44. int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
  45. if (result != NO_ERROR)
  46. {
  47. cout << "\nBiblioteka WinSock zainicjalizowana niepoprawnie. Kod bledu: " + WSAGetLastError() << endl;
  48. return 0;
  49. }
  50. cout << "\nBiblioteka WinSock zainicjalizowana poprawnie." << endl;
  51.  
  52. char sendBuff[1024];
  53. char receiveBuff[1024];
  54. int SenderAddrSize;
  55. int iResult;
  56. SOCKET _socket = INVALID_SOCKET;
  57. sockaddr_in sockAddr;
  58. _socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  59. if (_socket == INVALID_SOCKET)
  60. {
  61. cout << "\nGniazdo utworzone niepoprawnie. Kod bledu: " + WSAGetLastError() << endl;
  62. WSACleanup();
  63. return 0;
  64. }
  65. cout << "\nGniazdo utworzone poprawnie." << endl;
  66.  
  67. sockAddr.sin_family = AF_INET;
  68. sockAddr.sin_port = htons(7404);
  69. sockAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
  70. SenderAddrSize = sizeof(sockAddr);
  71.  
  72. while (true)
  73. {
  74. printf("\n\n> ");
  75. cin >> sendBuff;
  76. //if (strcmp(sendBuff, "exit") == 0)
  77. // break;
  78.  
  79. iResult = sendto(_socket, sendBuff, 1024, 0, (SOCKADDR *)& sockAddr, sizeof(sockAddr));
  80. if (iResult == SOCKET_ERROR)
  81. {
  82. cout << "\nNieudana proba wyslania datagramu. Kod bledu: " + WSAGetLastError() << endl;
  83. continue;
  84. }
  85.  
  86. if (strcmp(sendBuff, "exit") == 0)
  87. break;
  88. const int size = 20;
  89. double liczby[size];
  90. if(strcmp(sendBuff, "TEXT") == 0) iResult = recvfrom(_socket, (char*)receiveBuff, 1024, 0, (SOCKADDR *)& sockAddr, &SenderAddrSize);
  91. //else if(strcmp(sendBuff, "BIN") == 0) iResult = recvfrom(_socket, (char*)&liczby, sizeof(double) * size, 0, (SOCKADDR *)& sockAddr, &SenderAddrSize);
  92. if (iResult == SOCKET_ERROR)
  93. {
  94. cout << "\nNieudana proba odebrania datagramu. Kod bledu: " + WSAGetLastError() << endl;
  95. continue;
  96. }
  97.  
  98. if (strncmp(receiveBuff, "UNKNOWN COMMAND", 15) == 0)
  99. {
  100. printf("\nNie rozpoznano komendy\n");
  101. continue;
  102. }
  103.  
  104. stringstream konwerter = stringstream(receiveBuff);
  105. cout << konwerter.str() << endl;
  106. char typ;
  107. konwerter >> typ;
  108.  
  109. if (typ == 'T')
  110. {
  111. vector<double> liczby;
  112. while (!konwerter.eof())
  113. {
  114. static double number;
  115. konwerter >> number;
  116. liczby.push_back(number);
  117. }
  118.  
  119. int sum = 0;
  120.  
  121. for (int i = 0; i < liczby.size(); i++)
  122. {
  123. sum += liczby[i];
  124. }
  125. cout << "calkowity czas: " << sum << "s" << endl;
  126.  
  127. }
  128.  
  129. else if (typ == 'M')
  130. {
  131. wspolrzedne wsp[20];
  132. int i = 0;
  133. while (!konwerter.eof())
  134. {
  135. parseData(konwerter, wsp[i], 2);
  136. printf("\nOdebrano: x = %.2f y = %.2f", wsp[i].x, wsp[i].y);
  137. i++;
  138. }
  139. cout << endl << "elementy: " << i << endl;
  140. for (int j = 0; j < i; j++)
  141. {
  142. printf("sprawdzenie: x = %.2f y = %.2f\n",wsp[j].x, wsp[j].y);
  143. }
  144. double droga = 0;
  145. for (int j = 0; j < i-1; j++)
  146. {
  147. double dr = sqrt(((wsp[j + 1].x - wsp[j].x)*(wsp[j + 1].x - wsp[j].x)) + ((wsp[j + 1].y - wsp[j].y)*(wsp[j + 1].y - wsp[j].y)));
  148. droga += dr;
  149. }
  150. cout << endl << endl << "odleglosc: " << droga << endl;
  151.  
  152. }
  153.  
  154.  
  155. }
  156. shutdown(_socket, 2);
  157. iResult = closesocket(_socket);
  158. if (iResult == SOCKET_ERROR)
  159. {
  160. cout << "Nieudana proba zamknięcia gniazda. Kod bledu: %d" + WSAGetLastError() << endl;
  161. }
  162.  
  163. WSACleanup();
  164. cout << "\nUsunieto z pamieci biblioteke WinSock." << endl;
  165. return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement