Bei der Socket-Programmierung unterscheidet man zwischen Client und Server. Ein Server wartet auf Anfragen und bedient oftmals mehrere Clients während ein Client eine Verbindung zu einem Server aufnimmt.
Es werden die Module std.socket und std.socketstream benötigt.
Client:
Möchte man mit D eine Verbindung zu einem Server aufbauen und kommunizieren, geht man folgendermaßen vor:
- Socket-Objekt erstellen
- Verbindung zu der Adresse über einen bestimmten Port aufbauen
- Mithilfe eines Stream-Objektes Daten austauschen
- Verbindung schließen
- Code: Alles auswählen
Socket socket = new TcpSocket ();
//Socket socket = new UdpSocket (); für das UDP Protokoll
Die Verbindung wird über die Methode connect hergestellt. Dieser Methode wird ein InternetAddress-Objekt übergeben. Der Konstruktor von InternetAddress erwartet als ersten Parameter einen String mit der Adresse und eine Zahl mit dem Port.
- Code: Alles auswählen
Socket.connect (new InternetAddress (“www.google.de”, 80));
Jetzt wurde die Verbindung hergestellt und es können Daten gesendet und empfangen werden. Dazu stehen einen die Methoden send und receive zur Verfügung. Etwas mehr Komfort bietet die Klasse SocketStream, die die üblichen Methoden wie writeLine und readLine enthält. Man übergibt dem Konstruktor einfach das Socket-Objekt.
- Code: Alles auswählen
SocketStream stream = new SocketStream (socket);
Mit diesem Objekt kann man nun einfach Daten empfangen und senden. Als Beispiel wird ein HTTP-Request durchgeführt und die Antwort des Servers ausgegeben.
- Code: Alles auswählen
//Daten an Google senden
stream.writeLine ("GET / HTTP/1.0");
stream.writeLine ("Host: www.google.de");
stream.writeLine ("");
char[] line;
while (!stream.eof()) //solange der Stream offen ist lesen
{
line = stream.readLine(); //eine Zeile aus dem Stream lesen
writefln (line);
}
socket.close(); //Socket schließen
Man sollte die Verbindung immer am Ende mit der Closemethode des Sockets oder vom SocketStream schließen.
So, ich hoffe das hilft jemanden. Konstruktive Kritik ist natürlich auch erwünscht.
