== 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); } } }