Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1. //////KLIENT
  2. //o nawiązanie połączenia z serwerem,
  3. //o uzyskanie identyfikatora sesji,
  4. //o przesłanie pojedynczej liczby L,
  5. //o przesyłanie wartości liczbowych, będących „odpowiedziami” :
  6. //o klient ma odgadnąć liczbę wylosowaną przez serwer.
  7. //o zakończenie połączenia.
  8.  
  9.  
  10. #pragma comment(lib,"ws2_32.lib")
  11. #pragma warning(disable : 4996)
  12. #include <WinSock2.h>
  13. #include <iostream>
  14. #include <ctime>
  15. #include <cstdlib>
  16. #include <string>
  17. using namespace std;
  18.  
  19.  
  20. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  21. int bin_int(const string &s) {
  22. int a = 0;
  23. int p = 1;
  24. for (int i = s.size() - 1; i >= 0; i--) {
  25. if (s[i] == '1') a = a + p;
  26. p = p * 2;
  27. }
  28. return a;
  29. }
  30. string int_bin(const int &a) {
  31. int a2 = a;
  32. string s = "";
  33. for (; a2>0;) {
  34. if (a2 % 2 == 0) {
  35. a2 = a2 / 2;
  36. s = s + "0";
  37. }
  38. else {
  39. a2 = a2 / 2;
  40. s = s + "1";
  41. }
  42. }
  43. string wynik = "";
  44. for (int i = s.size() - 1; i >= 0; i--) wynik = wynik + s[i];
  45. return wynik;
  46. }
  47.  
  48.  
  49.  
  50. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  51. void pakowanie(char pakiet[15], int &OPERA, int &OD1, int &OD2, int &ID) {//tablica-zawsze działa na oryginale
  52. int a = OPERA;
  53. int i = 0;
  54. for (; a > 0; i++) {
  55. if (a % 2 == 0) {
  56. a = a / 2;
  57. pakiet[15 - i] = '0';
  58. }
  59. else {
  60. a = a / 2;
  61. pakiet[15 - i] = '1';
  62. }
  63. }
  64. a = OD1;
  65. for (; a > 0; i++) {
  66. if (a % 2 == 0) {
  67. a = a / 2;
  68. pakiet[15 - i] = '0';
  69. }
  70. else {
  71. a = a / 2;
  72. pakiet[15 - i] = '1';
  73. }
  74. }
  75. a = OD2;
  76. for (; a > 0; i++) {
  77. if (a % 2 == 0) {
  78. a = a / 2;
  79. pakiet[15 - i] = '0';
  80. }
  81. else {
  82. a = a / 2;
  83. pakiet[15 - i] = '1';
  84. }
  85. }
  86. a = ID;
  87. for (; a > 0; i++) {
  88. if (a % 2 == 0) {
  89. a = a / 2;
  90. pakiet[15 - i] = '0';
  91. }
  92. else {
  93. a = a / 2;
  94. pakiet[15 - i] = '1';
  95. }
  96. }
  97. }
  98.  
  99. void odpakowanie(char pakiet[15], int &OPERA, int &OD1, int &OD2, int &ID) {//tablica-zawsze działa na oryginale
  100. int a = 0;
  101. int p = 1;
  102. for (int i = 5; i >=0; i++) {
  103. if (pakiet[i] == 1) {
  104. a = a + p;
  105. p = p * 2;
  106. }
  107. }
  108. OPERA = a;
  109.  
  110. a = 0;
  111. p = 1;
  112. for (int i = 8; i >= 6; i++) {
  113. if (pakiet[i] == 1) {
  114. a = a + p;
  115. p = p * 2;
  116. }
  117. }
  118. OD1 = a;
  119.  
  120. a = 0;
  121. p = 1;
  122. for (int i = 11; i >= 9; i++) {
  123. if (pakiet[i] == 1) {
  124. a = a + p;
  125. p = p * 2;
  126. }
  127. }
  128. OD2 = a;
  129.  
  130. a = 0;
  131. p = 1;
  132. for (int i = 14; i >= 12; i++) {
  133. if (pakiet[i] == 1) {
  134. a = a + p;
  135. p = p * 2;
  136. }
  137. }
  138. ID = a;
  139. }
  140.  
  141. void zerowanie(char pakiet[15]) {
  142. for (int i = 0; i < 15; i++) {
  143. pakiet[i] = 0;
  144. }
  145. }
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  156. int main() {
  157. char pakiet[15];
  158. zerowanie(pakiet);
  159.  
  160. int OPERA=0;
  161. int OD1=0;
  162. int OD2=0;
  163. int ID=0;
  164.  
  165.  
  166. srand(time(NULL));
  167. ///Winsock Start
  168. WSAData wsaData;
  169. WORD DLLVersion = MAKEWORD(2, 1);
  170. if (WSAStartup(DLLVersion, &wsaData) != 0) ///jesli jest error
  171. {
  172. MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
  173. exit(1);
  174. }
  175.  
  176. SOCKADDR_IN addr; ///Adresy socketow
  177. int sizeofaddr = sizeof(addr); //wielkosc adresow
  178. addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //localhost (ten pc)
  179. addr.sin_port = htons(1111); //Port
  180. addr.sin_family = AF_INET; //IPv4 Socket (mozna dac 6)
  181.  
  182. SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL); //stawiamy socketa
  183. if (connect(Connection, (SOCKADDR*)&addr, sizeofaddr) != 0) //jesli sie nie udalo
  184. {
  185. MessageBoxA(NULL, "Failed to Connect", "Error", MB_OK | MB_ICONERROR);
  186. return 0;
  187. }
  188.  
  189. std::cout << "Connected!" << std::endl;
  190. recv(Connection, (char*)&L3, sizeof(L3), NULL); /// identyfikator
  191. odpakowanie(pakiet, OPERA, OD1, OD2, ID);////rozpakujemy identyfikator (na chuj nam on?) -> pewnie tak po prostu żeby ładnie to wyglądało (może to ma być tak teoretycznie jakbyśmy mieli utworzyć pare sesji?)
  192. //odpowiednie wykorzystanie OPERA, OD1, OD2, ID
  193.  
  194. cout << "Prosze podac liczbe" << endl;
  195. int L1;
  196. cin >> L1;
  197. //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
  198. pakowanie(pakiet, OPERA, OD1, OD2, ID);///pakujemy liczbe
  199. send(Connection, (char*)&L1, sizeof(L1), NULL); /////// wysylamy Liczbe
  200. //////odbieramy przedział. Jeden czy dwa? <--No dwa co nie :D po to robiłem to dodatkowe pole OD2
  201. recv(Connection, (char*)&L3, sizeof(L3), NULL);
  202. odpakowanie(pakiet, OPERA, OD1, OD2, ID);///wypakować przedział
  203. //odpowiednie wykorzystanie pól OPERA, OD1, OD2, ID
  204. boolean traf = 0;
  205. while (traf == 0) {
  206. cout << "Przedzial liczbowy wynosi: " << min << " - " << max << endl << "Prosze podac strzelana liczbe" << endl;
  207. cin >> L1;
  208. //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
  209. pakowanie(pakiet, OPERA, OD1, OD2, ID);////pakujemy
  210. send(Connection, (char*)&L1, sizeof(L1), NULL); ////wysylamy strzal
  211. recv(Connection, (char*)&L3, sizeof(L3), NULL); ///odbieramy info o strzale
  212. odpakowanie(pakiet, OPERA, OD1, OD2, ID);///odpakowac
  213. //odpowiednie wykorzystanie wartości OPERA, OD1, OD2, ID
  214. ///wkladamy wypakowanego trafa do naszego trafa wiec moze zmienic na 1
  215. }
  216. std::cout << "Trafilismy!" << std::endl;
  217. shutdown(Connection, 2);
  218. system("pause");
  219.  
  220. return 0;
  221.  
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement