| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- try:
- import usocket as socket
- except:
- import socket
- CONTENT = b"""\
- HTTP/1.0 200 OK
- Hello #%d from MicroPython!
- """
- def main(micropython_optimize=False):
- s = socket.socket()
- # Binding to all interfaces - server will be accessible to other hosts!
- ai = socket.getaddrinfo("0.0.0.0", 8080)
- print("Bind address info:", ai)
- addr = ai[0][-1]
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- s.bind(addr)
- s.listen(5)
- print("Listening, connect your browser to http://<this_host>:8080/")
- counter = 0
- while True:
- res = s.accept()
- client_sock = res[0]
- client_addr = res[1]
- print("Client address:", client_addr)
- print("Client socket:", client_sock)
- if not micropython_optimize:
- # To read line-oriented protocol (like HTTP) from a socket (and
- # avoid short read problem), it must be wrapped in a stream (aka
- # file-like) object. That's how you do it in CPython:
- client_stream = client_sock.makefile("rwb")
- else:
- # .. but MicroPython socket objects support stream interface
- # directly, so calling .makefile() method is not required. If
- # you develop application which will run only on MicroPython,
- # especially on a resource-constrained embedded device, you
- # may take this shortcut to save resources.
- client_stream = client_sock
- print("Request:")
- req = client_stream.readline()
- print(req)
- while True:
- h = client_stream.readline()
- if h == b"" or h == b"\r\n":
- break
- print(h)
- client_stream.write(CONTENT % counter)
- client_stream.close()
- if not micropython_optimize:
- client_sock.close()
- counter += 1
- print()
- main()
|