Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.42 KB | None | 0 0
  1. //////Server
  2. //wygenerowanie identyfikatora sesji,
  3. //o wylosowanie liczby tajnej z przedziału(L1 - L2; L1 + L2),
  4. //o przesłanie przedziału, w którym zawiera się liczba do zgadnięcia,
  5. //o informowanie klientów, czy wartość została odgadnięta.
  6.  
  7. #pragma comment(lib,"ws2_32.lib")
  8. #pragma warning(disable : 4996)
  9. #include <WinSock2.h>
  10. #include <iostream>
  11. #include <string>
  12. #include <ctime>
  13. #include <cstdlib>
  14. #include <bitset>
  15. using namespace std;
  16.  
  17.  
  18. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19. int bin_int(const string &s) {
  20. int a = 0;
  21. int p = 1;
  22. for (int i = s.size() - 1; i >= 0; i--) {
  23. if (s[i] == '1') a = a + p;
  24. p = p * 2;
  25. }
  26. return a;
  27. }
  28. string int_bin(const int &a) {
  29. int a2 = a;
  30. string s = "";
  31. for (; a2>0;) {
  32. if (a2 % 2 == 0) {
  33. a2 = a2 / 2;
  34. s = s + "0";
  35. }
  36. else {
  37. a2 = a2 / 2;
  38. s = s + "1";
  39. }
  40. }
  41. string wynik = "";
  42. for (int i = s.size() - 1; i >= 0; i--) wynik = wynik + s[i];
  43. return wynik;
  44. }
  45.  
  46.  
  47.  
  48. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  49. void pakowanie(char pakiet[15], int &OPERA, int &OD1, int &OD2, int &ID) {//tablica-zawsze działa na oryginale
  50. int a = OPERA;
  51. int i = 0;
  52. for (; a > 0; i++) {
  53. if (a % 2 == 0) {
  54. a = a / 2;
  55. pakiet[15 - i] = '0';
  56. }
  57. else {
  58. a = a / 2;
  59. pakiet[15 - i] = '1';
  60. }
  61. }
  62. a = OD1;
  63. for (; a > 0; i++) {
  64. if (a % 2 == 0) {
  65. a = a / 2;
  66. pakiet[15 - i] = '0';
  67. }
  68. else {
  69. a = a / 2;
  70. pakiet[15 - i] = '1';
  71. }
  72. }
  73. a = OD2;
  74. for (; a > 0; i++) {
  75. if (a % 2 == 0) {
  76. a = a / 2;
  77. pakiet[15 - i] = '0';
  78. }
  79. else {
  80. a = a / 2;
  81. pakiet[15 - i] = '1';
  82. }
  83. }
  84. a = ID;
  85. for (; a > 0; i++) {
  86. if (a % 2 == 0) {
  87. a = a / 2;
  88. pakiet[15 - i] = '0';
  89. }
  90. else {
  91. a = a / 2;
  92. pakiet[15 - i] = '1';
  93. }
  94. }
  95. }
  96.  
  97. void odpakowanie(char pakiet[15], int &OPERA, int &OD1, int &OD2, int &ID) {//tablica-zawsze działa na oryginale
  98. int a = 0;
  99. int p = 1;
  100. for (int i = 5; i >=0; i++) {
  101. if (pakiet[i] == 1) {
  102. a = a + p;
  103. p = p * 2;
  104. }
  105. }
  106. OPERA = a;
  107.  
  108. a = 0;
  109. p = 1;
  110. for (int i = 8; i >= 6; i++) {
  111. if (pakiet[i] == 1) {
  112. a = a + p;
  113. p = p * 2;
  114. }
  115. }
  116. OD1 = a;
  117.  
  118. a = 0;
  119. p = 1;
  120. for (int i = 11; i >= 9; i++) {
  121. if (pakiet[i] == 1) {
  122. a = a + p;
  123. p = p * 2;
  124. }
  125. }
  126. OD2 = a;
  127.  
  128. a = 0;
  129. p = 1;
  130. for (int i = 14; i >= 12; i++) {
  131. if (pakiet[i] == 1) {
  132. a = a + p;
  133. p = p * 2;
  134. }
  135. }
  136. ID = a;
  137. }
  138.  
  139. void zerowanie(char pakiet[15]) {
  140. for (int i = 0; i < 15; i++) {
  141. pakiet[i] = 0;
  142. }
  143. }
  144.  
  145.  
  146.  
  147.  
  148.  
  149. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  150. int main() {
  151. char pakiet1[15];
  152. char pakiet2[15];
  153. zerowanie(pakiet1);
  154. zerowanie(pakiet2);
  155.  
  156. int OPERA=0;
  157. int OD1=0;
  158. int OD2=0;
  159. int ID=0;
  160.  
  161.  
  162. srand(time(NULL));
  163. ///Winsock Start
  164. WSAData wsaData;
  165. WORD DLLVersion = MAKEWORD(2, 1);
  166. if (WSAStartup(DLLVersion, &wsaData) != 0) ///jesli jest error
  167. {
  168. MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
  169. exit(1);
  170. }
  171.  
  172. SOCKADDR_IN addr; ///Adresy socketow
  173. int addrlen = sizeof(addr); //wielkosc adresow
  174. addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //broadcast locally (tylko my mozemy sie laczyc)
  175. addr.sin_port = htons(1111); //Port
  176. addr.sin_family = AF_INET; //IPv4 Socket (mozna dac 6)
  177.  
  178. SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL); // Tworzenie socketu do nasłuchiwania
  179. bind(sListen, (SOCKADDR*)&addr, sizeof(addr)); ///przypisujemy adres do socketa
  180. listen(sListen, SOMAXCONN); //nasłuchujemy
  181.  
  182. SOCKET newConnection1; ///socket holdujacy polaczenie z kientem
  183. newConnection1 = accept(sListen, (SOCKADDR*)&addr, &addrlen); // akceptujemy polaczenie (jesli 0 = fail)
  184.  
  185. SOCKET newConnection2; ///socket holdujacy polaczenie z kientem
  186. newConnection2 = accept(sListen, (SOCKADDR*)&addr, &addrlen); // akceptujemy polaczenie (jesli 0 = fail)
  187.  
  188. if (newConnection1 == 0 || newConnection2 == 0)
  189. {
  190. std::cout << "Failed to accept the client's connection." << std::endl;
  191. return 0;
  192. }
  193. else //Jesli sie udalo
  194. {
  195. std::cout << "Clients Connected!" << std::endl;
  196.  
  197. //OP = POWITANIE;
  198. //AN = WYSL_IDEN;
  199. //////////mila//////////
  200. int ID1 = rand() % 7 + 1;
  201. int ID2 = rand() % 7 + 1;
  202. while (ID2 == ID1) {
  203. ID2 = rand() % 7 + 1;
  204. }
  205.  
  206. //ustawienie parametrów OPERA, OD1, OD2, ID
  207. pakowanie(pakiet1, OPERA, OD1, OD2, ID);///pakowanie wiadomosci
  208. //ustawienie parametrów OPERA, OD1, OD2, ID
  209. pakowanie(pakiet2, OPERA, OD1, OD2, ID);///pakowanie wiadomosci
  210. ///wyslanie identyfikatorow do klientow
  211. send(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  212. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  213. ///Odbieramy pakiety od klientow
  214. recv(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  215. recv(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  216. odpakowanie(pakiet1, OPERA, OD1, OD2, ID);
  217. odpakowanie(pakiet2, OPERA, OD1, OD2, ID);
  218. /////////odpakowanie wiadomosci >> liczby L1 i L2
  219. int L1;
  220. int L2;
  221. int max = L1 + L2;
  222. int min;
  223. if (L1 > L2) {
  224. min = L1 - L2;
  225. }
  226. else {
  227. min = L2 - L1;
  228. }
  229. int L3 = rand() % (max - min) + min;
  230. //odpowiednie ustawienie OPERA, OD1, OD2, ID
  231. pakowanie(pakiet1, OPERA, OD1, OD2, ID);////////pakujemy liczby z przedzialami, dwa osobne czy jeden?
  232. //odpowiednie ustawienie OPERA, OD1, OD2, ID
  233. pakowanie(pakiet2, OPERA, OD1, OD2, ID);
  234. send(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  235. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  236.  
  237. ///////////odbieramy zgadywane wartosci az ktorys trafi
  238. boolean traf = 0;
  239. while (traf == 0) {
  240. recv(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  241. odpakowanie(pakiet1, OPERA, OD1, OD2, ID);
  242. //odpowiednie wykorzystanie zawartości OPERA, OD1, OD2, ID
  243. recv(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  244. odpakowanie(pakiet2, OPERA, OD1, OD2, ID);
  245. //odpowiednie wykorzystanie zawartości OPERA, OD1, OD2, ID
  246.  
  247. if (L1 == L3 || L2 == L3) {
  248. traf = 1; ///jesli trafilismy 1
  249. //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
  250. pakowanie(pakiet1, OPERA, OD1, OD2, ID); ///pakujemy info o trafieniu
  251. //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
  252. pakowanie(pakiet2, OPERA, OD1, OD2, ID);
  253. send(newConnection1, pakiet1, sizeof(pakiet1), NULL);
  254. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  255. } //// klienci zamykaja i jest koniec
  256. else { ///nie trafilismy
  257. //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
  258. pakowanie(pakiet1, OPERA, OD1, OD2, ID);////pakujemy info o nietrafieniu. Moze zapakowac tylko raz i potem tylko powtarzac?<- nie nie może, musi jakos zmienić info - ale tylko jeśli w końcu trafią
  259. //odpowiednie ustawienie wartości OPERA, OD1, OD2, ID
  260. pakowanie(pakiet2, OPERA, OD1, OD2, ID);
  261. send(newConnection1, pakiet1, sizeof(pakiet1), NULL);
  262. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  263. }
  264.  
  265. }
  266.  
  267.  
  268. /// shutdown(newConnection, 2);
  269. //// system("pause");
  270. }
  271.  
  272. return 0;
  273.  
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement