test-tcp.nut 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. function download(host, file, extra_header=null){
  2. local sock = socket.tcp();
  3. sock.connect(host, 80);
  4. //sock.setoption("bindtodevice", "wlan0"); //requires root privileges
  5. local info = sock.getpeername()
  6. print(info.address, info.port);
  7. //sock.settimeout(1);
  8. local count = 0; // counts number of bytes read
  9. local req = "GET " + file + " HTTP/1.1\r\nHost: " + host + "\r\n";
  10. if (extra_header) req += extra_header + "\r\n";
  11. req += "\r\n";
  12. print(req, req.len());
  13. sock.send(req);
  14. local s, rc;
  15. local tbl = {};
  16. local len = 0;
  17. while (true){
  18. rc = sock.receive("*l");
  19. s = rc[0];
  20. print("s", s, rc[1]);
  21. //if err == "closed" then break end
  22. if (s.len() == 0) break;
  23. //if (rc[1] == socket.IO_CLOSED) break;
  24. local slen;
  25. s.gmatch("Content%-Length: (%d+)", function(m){ slen=m; return false;});
  26. if (slen) {
  27. len = slen.tointeger();
  28. }
  29. }
  30. rc = sock.receive(len);
  31. s = rc[0];
  32. sock.close();
  33. //print(file, count)
  34. return s;
  35. }
  36. local page = download("w3.impa.br", "/~diego/software/luasocket/tcp.html");
  37. //local page = download("www.google.co.uk", "/");
  38. print(page);