1
2////////////////////////////////////////////////////////////
3// Headers
4////////////////////////////////////////////////////////////
5#include <SFML/Network.hpp>
6#include <iostream>
7
8
9////////////////////////////////////////////////////////////
10/// Launch a server, wait for a message, send an answer.
11///
12////////////////////////////////////////////////////////////
13void runUdpServer(unsigned short port)
14{
15 // Create a socket to receive a message from anyone
16 sf::UdpSocket socket;
17
18 // Listen to messages on the specified port
19 if (socket.bind(port) != sf::Socket::Done)
20 return;
21 std::cout << "Server is listening to port " << port << ", waiting for a message... " << std::endl;
22
23 // Wait for a message
24 char in[128];
25 std::size_t received;
26 sf::IpAddress sender;
27 unsigned short senderPort;
28 if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done)
29 return;
30 std::cout << "Message received from client " << sender << ": \"" << in << "\"" << std::endl;
31
32 // Send an answer to the client
33 const char out[] = "Hi, I'm the server";
34 if (socket.send(out, sizeof(out), sender, senderPort) != sf::Socket::Done)
35 return;
36 std::cout << "Message sent to the client: \"" << out << "\"" << std::endl;
37}
38
39
40////////////////////////////////////////////////////////////
41/// Send a message to the server, wait for the answer
42///
43////////////////////////////////////////////////////////////
44void runUdpClient(unsigned short port)
45{
46 // Ask for the server address
47 sf::IpAddress server;
48 do
49 {
50 std::cout << "Type the address or name of the server to connect to: ";
51 std::cin >> server;
52 }
53 while (server == sf::IpAddress::None);
54
55 // Create a socket for communicating with the server
56 sf::UdpSocket socket;
57
58 // Send a message to the server
59 const char out[] = "Hi, I'm a client";
60 if (socket.send(out, sizeof(out), server, port) != sf::Socket::Done)
61 return;
62 std::cout << "Message sent to the server: \"" << out << "\"" << std::endl;
63
64 // Receive an answer from anyone (but most likely from the server)
65 char in[128];
66 std::size_t received;
67 sf::IpAddress sender;
68 unsigned short senderPort;
69 if (socket.receive(in, sizeof(in), received, sender, senderPort) != sf::Socket::Done)
70 return;
71 std::cout << "Message received from " << sender << ": \"" << in << "\"" << std::endl;
72}
73