While trying to learn sockets in Phobos, I ran into a problem. I was trying to
download the google logo via an HTTP GET. when I do a socketStream.read, the
returned "bytes read" value indicates that less bytes were read in than were
available (4097 bytes to be exact). The google logo is 8558 bytes in size as
indicated by the HTTP headers received. Here is my code:
module HttpManager;
import std.stream;
import std.stdio;
import std.socket;
import std.socketstream;
import std.string;
int main()
{
char[] line;
ubyte[] data = new ubyte[8558];
uint num = 0;
TcpSocket socket = new TcpSocket(new InternetAddress("www.google.com",
80));
socket.send("GET /intl/en_ALL/images/logo.gif HTTP/1.0\r\n\r\n");
SocketStream socketStream = new SocketStream(socket);
while(!socketStream.eof)
{
line = socketStream.readLine();
if (line=="")
break;
writef("%s\n", line);
}
num = socketStream.read(data);
writef("\n\nNum: %d\n\n", num);
socketStream.close;
socket.close;
File file = new File("logo.gif", FileMode.Out);
file.write(data);
file.close;
return 0;
}
The console output is:
HTTP/1.1 200 OK
Content-Type: image/gif
Last-Modified: Wed, 07 Jun 2006 19:38:24 GMT
Date: Tue, 03 Nov 2009 13:04:57 GMT
Expires: Wed, 03 Nov 2010 13:04:57 GMT
X-Content-Type-Options: nosniff
Server: gws
Content-Length: 8558
Cache-Control: public, max-age=31536000
Age: 28322
X-XSS-Protection: 0
Num: 4097
I am using dmd v1.050 with dsss v0.78
Sorry if this is a stupid question. Any help would be very appreciated :)
Thanks,
Zane