mirror of
https://github.com/SFML/SFML.git
synced 2024-11-28 22:31:09 +08:00
84 lines
1.7 KiB
D
84 lines
1.7 KiB
D
|
module socketserver;
|
||
|
|
||
|
import dsfml.system.all;
|
||
|
import dsfml.network.all;
|
||
|
|
||
|
version (Tango)
|
||
|
{
|
||
|
import tango.io.Console;
|
||
|
import tango.io.Stdout;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
import std.stdio;
|
||
|
}
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
//We create a TCP socket for listening incomming client
|
||
|
SocketTCP listener = new SocketTCP();
|
||
|
|
||
|
//Set a random port for the listener
|
||
|
if (!listener.listen(9000))
|
||
|
assert(0);
|
||
|
|
||
|
//Creation of TCP socket
|
||
|
SocketTCP client = new SocketTCP();
|
||
|
IPAddress ipClient;
|
||
|
|
||
|
display("Waiting for client."w);
|
||
|
|
||
|
if (listener.accept(client, ipClient) == SocketStatus.DONE) //This call blocks until client connection
|
||
|
{
|
||
|
display("New client connected."w);
|
||
|
//The packet for retrieving the client message
|
||
|
Packet p = new Packet();
|
||
|
display("Waiting for data"w);
|
||
|
if (client.receive(p) != SocketStatus.DONE) //Assert on reception error
|
||
|
assert(0);
|
||
|
|
||
|
|
||
|
//Display the string send by the client
|
||
|
wchar[] c;
|
||
|
p.get(c);
|
||
|
display("Packet received : "w ~ c);
|
||
|
|
||
|
//Clear the packet (We could use a new one)
|
||
|
p.clear();
|
||
|
|
||
|
//and send response to client
|
||
|
client.send(p.set("Hello from the server !"w));
|
||
|
}
|
||
|
read();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Multilib string display
|
||
|
*/
|
||
|
void display(wchar[] c)
|
||
|
{
|
||
|
version (Tango)
|
||
|
{
|
||
|
Stdout(c).newline;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
writefln("%s", c);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Dummy function to prevent console closing on windows
|
||
|
*/
|
||
|
void read()
|
||
|
{
|
||
|
version (Tango)
|
||
|
{
|
||
|
Cin.get();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
readln();
|
||
|
}
|
||
|
}
|