summaryrefslogtreecommitdiffstatshomepage
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/network/http_client.py2
-rw-r--r--examples/network/http_client_ssl.py2
-rw-r--r--examples/network/http_server.py2
-rw-r--r--examples/network/http_server_ssl.py59
4 files changed, 62 insertions, 3 deletions
diff --git a/examples/network/http_client.py b/examples/network/http_client.py
index b74daeb08d..3701e75e16 100644
--- a/examples/network/http_client.py
+++ b/examples/network/http_client.py
@@ -9,7 +9,7 @@ def main(use_stream=False):
ai = socket.getaddrinfo("google.com", 80)
print("Address infos:", ai)
- addr = ai[0][4]
+ addr = ai[0][-1]
print("Connect address:", addr)
s.connect(addr)
diff --git a/examples/network/http_client_ssl.py b/examples/network/http_client_ssl.py
index 5d4d8fd1b5..53b1c732bc 100644
--- a/examples/network/http_client_ssl.py
+++ b/examples/network/http_client_ssl.py
@@ -13,7 +13,7 @@ def main(use_stream=True):
ai = _socket.getaddrinfo("google.com", 443)
print("Address infos:", ai)
- addr = ai[0][4]
+ addr = ai[0][-1]
print("Connect address:", addr)
s.connect(addr)
diff --git a/examples/network/http_server.py b/examples/network/http_server.py
index eb9b5fc3b8..80dfc5db02 100644
--- a/examples/network/http_server.py
+++ b/examples/network/http_server.py
@@ -16,7 +16,7 @@ def main(use_stream=False):
# 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][4]
+ addr = ai[0][-1]
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
diff --git a/examples/network/http_server_ssl.py b/examples/network/http_server_ssl.py
new file mode 100644
index 0000000000..04e0913448
--- /dev/null
+++ b/examples/network/http_server_ssl.py
@@ -0,0 +1,59 @@
+try:
+ import usocket as socket
+except:
+ import socket
+import ussl as ssl
+
+
+CONTENT = b"""\
+HTTP/1.0 200 OK
+
+Hello #%d from MicroPython!
+"""
+
+def main(use_stream=True):
+ s = socket.socket()
+
+ # Binding to all interfaces - server will be accessible to other hosts!
+ ai = socket.getaddrinfo("0.0.0.0", 8443)
+ 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 https://<this_host>:8443/")
+
+ counter = 0
+ while True:
+ res = s.accept()
+ client_s = res[0]
+ client_addr = res[1]
+ print("Client address:", client_addr)
+ print("Client socket:", client_s)
+ client_s = ssl.wrap_socket(client_s, server_side=True)
+ print(client_s)
+ print("Request:")
+ if use_stream:
+ # Both CPython and MicroPython SSLSocket objects support read() and
+ # write() methods.
+ # Browsers are prone to terminate SSL connection abruptly if they
+ # see unknown certificate, etc. We must continue in such case -
+ # next request they issue will likely be more well-behaving and
+ # will succeed.
+ try:
+ req = client_s.read(4096)
+ print(req)
+ if req:
+ client_s.write(CONTENT % counter)
+ except Exception as e:
+ print("Exception serving request:", e)
+ else:
+ print(client_s.recv(4096))
+ client_s.send(CONTENT % counter)
+ client_s.close()
+ counter += 1
+ print()
+
+
+main()