Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // UDP server that use blocking sockets
- #define _WINSOCK_DEPRECATED_NO_WARNINGS
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #include <winsock2.h>
- #include <ws2tcpip.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include "conio.h"
- #pragma comment (lib, "Ws2_32.lib")
- #pragma comment (lib, "Mswsock.lib")
- #pragma comment (lib, "AdvApi32.lib")
- #define SERVER_PORT 15000 // Port number of server that will be used for communication with clients
- #define BUFFER_SIZE 512 // Size of buffer that will be used for sending and receiving messages to clients
- struct Client
- {
- char nadimak[32];
- char IP[16];
- int port;
- };
- void mySend(SOCKET soket, char* msg, sockaddr_in dest)
- {
- int result = sendto(soket, msg, strlen(msg), 0, (sockaddr*)&dest, sizeof(dest));
- if (result == SOCKET_ERROR)
- {
- printf("Sendto failed with code %d!\n", WSAGetLastError());
- closesocket(soket);
- WSACleanup();
- exit(1);
- }
- }
- Client makeClient(sockaddr_in client, char* name)
- {
- Client c;
- strcpy_s(c.IP, inet_ntoa(client.sin_addr));
- strcpy_s(c.nadimak, name);
- c.port = htons(client.sin_port);
- return c;
- }
- void initWSA(WSADATA* data)
- {
- if (WSAStartup(MAKEWORD(2, 2), data) != 0)
- {
- printf("WSAStartup failed with error: %d\n", WSAGetLastError());
- exit(1);
- }
- }
- int main()
- {
- WSADATA data;
- initWSA(&data);
- sockaddr_in serverAddress;
- memset((char*)&serverAddress, 0, sizeof(serverAddress));
- serverAddress.sin_family = AF_INET; // set server address protocol family
- serverAddress.sin_addr.s_addr = INADDR_ANY; // use all available addresses of server
- serverAddress.sin_port = htons(SERVER_PORT);
- SOCKET serverSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if (serverSocket == INVALID_SOCKET)
- {
- printf("Creating socket failed with error: %d\n", WSAGetLastError());
- WSACleanup();
- return 1;
- }
- int iResult = bind(serverSocket, (SOCKADDR *)&serverAddress, sizeof(serverAddress));
- if (iResult == SOCKET_ERROR)
- {
- printf("Socket bind failed with error: %d\n", WSAGetLastError());
- closesocket(serverSocket);
- WSACleanup();
- return 1;
- }
- while (true)
- {
- printf("Server ceka vase nadimke...\n");
- sockaddr_in client1, client2;
- int client1Len = sizeof(client1), client2Len = sizeof(client2);
- char nadimak1[32] = { 0 }, nadimak2[32] = { 0 };
- memset(&client1, 0, sizeof(client1));
- memset(&client2, 0, sizeof(client2));
- char pozdrav[50] = { 0 };
- int result;
- result = recvfrom(serverSocket, nadimak1, 32, 0, (sockaddr*)&client1, &client1Len);
- //nadimak1[result] = '\0';
- sprintf_s(pozdrav, "Welcome, %s!\n", nadimak1);
- mySend(serverSocket, pozdrav, client1);
- result = recvfrom(serverSocket, nadimak2, 32, 0, (sockaddr*)&client2, &client2Len);
- //nadimak2[result] = '\0';
- sprintf_s(pozdrav, "Welcome, %s!\n", nadimak2);
- mySend(serverSocket, pozdrav, client2);
- Client k1 = makeClient(client1, nadimak1);
- Client k2 = makeClient(client2, nadimak2);
- printf("%s - %s : %d\n", k1.nadimak, k1.IP, k1.port);
- printf("%s - %s : %d\n", k2.nadimak, k2.IP, k2.port);
- printf("---------------------------------------------------------\n");
- printf("-------------------Pocetak dopisivanja-------------------\n");
- printf("---------------------------------------------------------\n");
- // Main server loop
- char dataBuffer[BUFFER_SIZE];
- while (1)
- {
- memset(dataBuffer, 0, BUFFER_SIZE);
- sockaddr_in clientAddress;
- memset(&clientAddress, 0, sizeof(clientAddress));
- int sockAddrLen = sizeof(clientAddress);
- iResult = recvfrom(serverSocket, dataBuffer, BUFFER_SIZE, 0, (SOCKADDR *)&clientAddress, &sockAddrLen);
- dataBuffer[iResult] = '\0';
- int port = htons(clientAddress.sin_port);
- if (port == k1.port)
- {
- // Prvi je
- mySend(serverSocket, dataBuffer, client2);
- printf("%s - %s\n", nadimak1, dataBuffer);
- if (!strcmp(dataBuffer, "Goodbye"))
- break;
- }
- else if (port == k2.port)
- {
- //Drugi je
- mySend(serverSocket, dataBuffer, client1);
- printf("%s - %s\n", nadimak2, dataBuffer);
- if (!strcmp(dataBuffer, "Goodbye"))
- break;
- }
- }
- printf("---------------------------------------------------------\n");
- printf("----------------------Kraj dopisivanja-------------------\n");
- printf("---------------------------------------------------------\n");
- }
- iResult = closesocket(serverSocket);
- if (iResult == SOCKET_ERROR)
- {
- printf("closesocket failed with error: %ld\n", WSAGetLastError());
- WSACleanup();
- return 1;
- }
- printf("Server successfully shut down.\n");
- WSACleanup();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement