Advertisement
Alchemik96

PWSS TCP Serwer R/M

May 21st, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <winsock.h>
  4. #include <string.h>
  5. #include <conio.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9.  
  10. #pragma comment(lib, "wsock32.lib")
  11. //FUNKCJA DO SELECT//
  12. int Sprawdz(SOCKET _gniazdo)
  13. {
  14. timeval timer = { 0,10000 };
  15. fd_set set;
  16. FD_ZERO(&set);
  17. FD_SET(_gniazdo, &set);
  18. int wynik = select(FD_SETSIZE, &set, NULL, NULL, &timer);
  19. return wynik;
  20.  
  21. }
  22.  
  23. int main()
  24. {
  25. //Inicjalizacja serwera
  26. WSADATA wsDate;
  27. if (WSAStartup(MAKEWORD(2, 2), &wsDate) != 0)
  28. {
  29. printf("Init Error\n");
  30. WSACleanup();
  31. _getch();
  32. return 1;
  33. }
  34. printf("Init\tOK\n");
  35. //Tworzenie gniazda
  36. SOCKET gniazdo, gniazdoA;
  37. if ((gniazdo = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
  38. {
  39. printf("Blad: ", WSAGetLastError());
  40. shutdown(gniazdo, 2);
  41. closesocket(gniazdo);
  42. WSACleanup();
  43. _getch();
  44. return 1;
  45. }
  46. printf("Socket\tOK\n");
  47. //Struktura adresowa
  48. sockaddr_in server,serverD;
  49. server.sin_family = AF_INET;
  50. server.sin_port = htons(21040);
  51. server.sin_addr.s_addr = INADDR_ANY;
  52. //Bindowanie gniazda
  53. if (bind(gniazdo, (SOCKADDR*)&server, sizeof(server)) == SOCKET_ERROR)
  54. {
  55. printf("Blad: ", WSAGetLastError());
  56. shutdown(gniazdo, 2);
  57. closesocket(gniazdo);
  58. WSACleanup();
  59. _getch();
  60. return 1;
  61. }
  62. printf("Bind\tOK\n");
  63. //Ustawienie żądania nasłuchiwania
  64. if ((listen(gniazdo, 2)) == SOCKET_ERROR)
  65. {
  66. printf("Blad: ", WSAGetLastError());
  67. shutdown(gniazdo, 2);
  68. closesocket(gniazdo);
  69. WSACleanup();
  70. _getch();
  71. return 1;
  72. }
  73. printf("Listen\tOK\n");
  74. //Rozpoczęcie pętli odbierająco-nadającej
  75. while (true)
  76. {
  77. if (Sprawdz(gniazdo) > 0)
  78. {
  79. int rozmiar = sizeof(serverD);
  80. gniazdoA = accept(gniazdo, (SOCKADDR*)&server, &rozmiar);
  81. if (gniazdoA < 0)
  82. {
  83.  
  84. printf("Blad: ", WSAGetLastError());
  85. shutdown(gniazdo, 2);
  86. closesocket(gniazdo);
  87. WSACleanup();
  88. _getch();
  89. return 1;
  90. }
  91. char buffor[512];
  92. memset(buffor, 0, sizeof(buffor));
  93. char znak[1];
  94. int indeks = rand() % 2;
  95. if (indeks == 0) strcpy(znak, "R");
  96. if (indeks == 1) strcpy(znak, "M");
  97. memcpy(buffor, znak, sizeof(znak));
  98. int ilosc = rand() % 10 + 1;
  99. memset(buffor + 1, ilosc, sizeof(ilosc));
  100. int *tablica = new int[ilosc];
  101. for (int i = 0; i < ilosc; i++)
  102. {
  103. tablica[i] = rand() % 100;
  104. memset(buffor + (4+(4 * i)), tablica[i], sizeof(int));
  105. }
  106. delete(tablica);
  107. send(gniazdoA, buffor, 512, 0);
  108. printf("Wyslalem\n");
  109. }
  110. }
  111. _getch();
  112. return 0;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement