== Auszug aus Adam Ruppe (destructiona...@gmail.com)'s Artikel
> Browsers speak HTTP, which is a higher level protocol than
> plain sockets.
> If you connect to your app with a simpler program, like nc,
> you'll probably see the message.
> If you want to serve web pages, consider one of these options:
> a) Looking up the HTTP protocol itself. You've gotta send headers
> before you send data or the browser won't understand what you are
> replying to.
> b) Use an existing web server, like Apache, and write your app as
> a cgi program
> The HTTP headers you need to send on a plain socket look like this:
> =====
> HTTP/1.0 200 OK
> Content-Length: 11
> Content-Type: text/html
> hello world
> =====
> instead of just plain "hello world".

The message exchange works, but I've some trouble in getting the messages 
correctly. I've the following, small apps:

module server;

import std.socket;
import std.stream;
import std.socketStream;

void main() {

        TcpSocket s = new TcpSocket();
        s.bind(new InternetAddress(5088));
        s.listen(1);

        while(true) {

                Socket a = s.accept();
                SocketStream cs = new SocketStream(a);

                string response = "HELLO WORLD!";
                cs.writeBlock(response.ptr, response.length);

                a.close();

        }

}

module client;

import std.socket;
import std.math;
import std.stream;
import std.socketStream;
import std.stdio : writeln;

void main() {

        TcpSocket s = new TcpSocket();
        s.connect(new InternetAddress("127.0.0.1", 5088));

        while(true) {

                void[] msg;
                SocketStream cs = new SocketStream(s);
                cs.readBlock(msg.ptr, 12);
                writeln(msg);

        }

}

But... when I start the server and client, I don't get any response/and or my 
message is empty. When I use the simply methods of streams
(like write()), it works but the problem is, that the following will end in an 
endless loop:

module client;

import std.socket;
import std.math;
import std.stream;
import std.socketStream;
import std.stdio : writeln;

void main() {

        TcpSocket s = new TcpSocket();
        s.connect(new InternetAddress("127.0.0.1", 5088));

        while(true) {

                uint len;
                string msg;
                SocketStream cs = new SocketStream(s);
                while(!cs.eof()) { // this loop repeats forever, although the 
stream is empty
                        cs.read(len);
                        cs.readString(msg, len);
                }

        }

}

Reply via email to