Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include"stdafx.h"
- #include <winsock.h>
- #include <iostream>
- #include <vector>
- #include <sstream>
- #include <time.h>
- #include <string>
- #include <conio.h>
- #pragma comment (lib,"ws2_32.lib")
- using namespace std;
- enum { GETT, GETP, RANDOM, EXIT };
- int main()
- {
- WSADATA wsaData;
- int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
- if (result != NO_ERROR)
- {
- cout << "\nBiblioteka WinSock zainicjalizowana niepoprawnie. Kod bledu: " + WSAGetLastError() << endl;
- return 0;
- }
- cout << "\nBiblioteka WinSock zainicjalizowana poprawnie." << endl;
- string sendBuff;
- char receiveBuff[1024];
- int SenderAddrSize;
- int ReceiverAddrSize;
- int iResult;
- SOCKET _socket = INVALID_SOCKET;
- _socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (_socket == INVALID_SOCKET)
- {
- cout << "\nGniazdo utworzone niepoprawnie. Kod bledu: " + WSAGetLastError() << endl;
- WSACleanup();
- return 0;
- }
- cout << "\nGniazdo utworzone poprawnie." << endl;
- SOCKADDR_IN serwer;
- serwer.sin_family = AF_INET;
- serwer.sin_addr.s_addr = INADDR_ANY;
- serwer.sin_port = htons(7404);
- SenderAddrSize = sizeof(serwer);
- if ((bind(_socket, (SOCKADDR*)&serwer, sizeof(serwer))) == SOCKET_ERROR)
- {
- printf("Blad bindowania gniazda : %d", WSAGetLastError());
- shutdown(_socket, 2); closesocket(_socket); WSACleanup(); _getch(); return 0;
- }
- SOCKADDR_IN client;
- ReceiverAddrSize = sizeof(client);
- while (true)
- {
- sendBuff.clear();
- // dla zadanego polecenia (jeśli prawidłowe) odbieramy dane liczbowe
- iResult = recvfrom(_socket, receiveBuff, 1024, 0, (SOCKADDR *)& client, &ReceiverAddrSize);
- if (iResult == SOCKET_ERROR)
- {
- printf("\nNieudana proba odebrania datagramu. Kod bledu: %d\n", +WSAGetLastError());
- continue;
- }
- if (strncmp(receiveBuff, "GETT", 4) == 0)
- {
- sendBuff.append("T");
- }
- else if (strncmp(receiveBuff, "GETP", 4) == 0)
- {
- sendBuff.append("P");
- }
- else if (strncmp(receiveBuff, "RANDOM", 6) == 0)
- {
- rand() % 2 ? sendBuff.append("T") : sendBuff.append("P");
- }
- else
- {
- iResult = sendto(_socket, "UNKNOWN COMMAND", 15, 0, (SOCKADDR *)& client, ReceiverAddrSize);
- if (iResult == SOCKET_ERROR)
- {
- cout << "\nNieudana proba wyslania datagramu. Kod bledu: " + WSAGetLastError() << endl;
- }
- continue;
- }
- srand(time(NULL));
- int size = rand() % 20 + 1;
- while (size--)
- {
- char temp[64];
- sprintf_s(temp, " %d.%d", rand() % 51, rand() % 1001);
- sendBuff.append(temp);
- }
- printf("\nWyslano:\n%s", sendBuff.c_str());
- // wysłanie polecenia do serwera. Prawidłowe polecenia: GETT - pobranie temperatur, GETP - pobranie ciśnień, RANDOM - losowa kategoria, EXIT - koniec
- iResult = sendto(_socket, sendBuff.c_str(), 1024, 0, (SOCKADDR *)& client, ReceiverAddrSize);
- if (iResult == SOCKET_ERROR)
- {
- cout << "\nNieudana proba wyslania datagramu. Kod bledu: " + WSAGetLastError() << endl;
- continue;
- }
- }
- iResult = closesocket(_socket);
- if (iResult == SOCKET_ERROR)
- {
- cout << "Nieudana proba zamknięcia gniazda. Kod bledu: %d" + WSAGetLastError() << endl;
- }
- WSACleanup();
- cout << "\nUsunieto z pamieci biblioteke WinSock." << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement