Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.00 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 &OD, 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 = OD;
  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 &OD, 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. OD = 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.  
  140.  
  141.  
  142.  
  143.  
  144. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  145. int main() {
  146. char pakiet1[15];
  147. char pakiet2[15];
  148.  
  149. int OPERA;
  150. int OD;
  151. int OD2;
  152. int ID;
  153.  
  154.  
  155. srand(time(NULL));
  156. ///Winsock Start
  157. WSAData wsaData;
  158. WORD DLLVersion = MAKEWORD(2, 1);
  159. if (WSAStartup(DLLVersion, &wsaData) != 0) ///jesli jest error
  160. {
  161. MessageBoxA(NULL, "Winsock startup failed", "Error", MB_OK | MB_ICONERROR);
  162. exit(1);
  163. }
  164.  
  165. SOCKADDR_IN addr; ///Adresy socketow
  166. int addrlen = sizeof(addr); //wielkosc adresow
  167. addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //broadcast locally (tylko my mozemy sie laczyc)
  168. addr.sin_port = htons(1111); //Port
  169. addr.sin_family = AF_INET; //IPv4 Socket (mozna dac 6)
  170.  
  171. SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL); // Tworzenie socketu do nasłuchiwania
  172. bind(sListen, (SOCKADDR*)&addr, sizeof(addr)); ///przypisujemy adres do socketa
  173. listen(sListen, SOMAXCONN); //nasłuchujemy
  174.  
  175. SOCKET newConnection1; ///socket holdujacy polaczenie z kientem
  176. newConnection1 = accept(sListen, (SOCKADDR*)&addr, &addrlen); // akceptujemy polaczenie (jesli 0 = fail)
  177.  
  178. SOCKET newConnection2; ///socket holdujacy polaczenie z kientem
  179. newConnection2 = accept(sListen, (SOCKADDR*)&addr, &addrlen); // akceptujemy polaczenie (jesli 0 = fail)
  180.  
  181. if (newConnection1 == 0 || newConnection2 == 0)
  182. {
  183. std::cout << "Failed to accept the client's connection." << std::endl;
  184. return 0;
  185. }
  186. else //Jesli sie udalo
  187. {
  188. std::cout << "Clients Connected!" << std::endl;
  189. ///zerowanie_pakietu();
  190. //OP = POWITANIE;
  191. //AN = WYSL_IDEN;
  192. //////////mila//////////
  193. int ID1 = rand() % 7 + 1;
  194. int ID2 = rand() % 7 + 1;
  195. while (ID2 == ID1) {
  196. ID2 = rand() % 7 + 1;
  197. }
  198. ///pakowanie wiadomosci
  199. ///wyslanie identyfikatorow do klientow
  200. send(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  201. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  202. ///Odbieramy pakiety od klientow
  203. recv(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  204. recv(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  205. /////////odpakowanie wiadomosci >> liczby L1 i L2
  206. int L1;
  207. int L2;
  208. int max = L1 + L2;
  209. int min;
  210. if (L1 > L2) {
  211. min = L1 - L2;
  212. }
  213. else {
  214. min = L2 - L1;
  215. }
  216. int L3 = rand() % (max - min) + min;
  217. ////////pakujemy liczby z przedzialami, dwa osobne czy jeden?
  218. send(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  219. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  220.  
  221. ///////////odbieramy zgadywane wartosci az ktorys trafi
  222. boolean traf = 0;
  223. while (traf == 0) {
  224. recv(newConnection1, (char*)&pakiet1, sizeof(pakiet1), NULL);
  225. //odpakowac pakiet1
  226. recv(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  227. //odpakowac pakiet2
  228.  
  229. if (L1 == L3 || L2 == L3) {
  230. traf = 1; ///jesli trafilismy 1
  231. ///pakujemy info o trafieniu
  232. send(newConnection1, pakiet1, sizeof(pakiet1), NULL);
  233. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  234. } //// klienci zamykaja i jest koniec
  235. else { ///nie trafilismy
  236. ////pakujemy info o nietrafieniu. Moze zapakowac tylko raz i potem tylko powtarzac?
  237. send(newConnection1, pakiet1, sizeof(pakiet1), NULL);
  238. send(newConnection2, pakiet2, sizeof(pakiet2), NULL);
  239. }
  240.  
  241. }
  242.  
  243.  
  244. /// shutdown(newConnection, 2);
  245. //// system("pause");
  246. }
  247.  
  248. return 0;
  249.  
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement