หากเราจะนำข้อมูลที่อยู่อีกเครื่องหนึ่งส่งมาอีกเครื่องหนึ่งโดยอยู่บนเครือข่ายเดียวกัน ผมจึงเกิดความคิดว่า หากเราจะเขียนโปรแกรมรับส่งข้อมูล json ผ่านเครือข่ายเดียวกันด้วย http.server ได้ไหม ผมเลยลองเขียนดูครับ
ผมนำความรู้ที่ได้จากบทความ
เราจะไปเขียนโปรแกรมกันครับ
ผมต้องการส่งข้อมูล [1,2,3,{'4': 5,'6': 7}] โดยจะแปลงเป็น json แล้วส่งไปยังเครื่องคอมที่เรียกข้อมูล แล้วแปลง json เป็นข้อมูลต้นฉบับอีกทีครับ
ส่วน server
[python]
import http.server
import json
#ข้อมูลที่แปลงเป็น json
data = json.dumps([1,2,3,{'4': 5,'6': 7}])
HOST_NAME = "192.168.1.100" #ที่อยู่ไอพีของเครื่อง server บนเครือข่าย
hostPort = 8088
class MyHandler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
print(self.wfile)
content = [data]
self.wfile.write("".join(content).encode("UTF-8")) #ส่งข้อมูล
server_class = http.server.HTTPServer
httpd = server_class((HOST_NAME, hostPort),MyHandler)
httpd.serve_forever()
[/python]
เมื่อเราเรียก http://192.168.1.100:8088 จะพบกับข้อมูล json
ต่อไปเราจะเขียนส่วนรับข้อมูลกันครับ
ส่วนรับข้อมูล
[python]
>>> import urllib.request
>>> import json
>>> data = urllib.request.urlopen('http://192.168.1.100:8088') #เรียกข้อมูลจาก server
>>> to = data.read()
>>> a = json.loads(to.decode('utf-8')) #เนื่องจาก server เข้ารหัสเป็น UTF 8 ต้องถอดก่อนใช้งานข้อมูลครับ
>>> print(a)
[1, 2, 3, {'4': 5, '6': 7}]
[/python]
จะเห็นได้ว่า เรารับส่งข้อมูลผ่านเครือข่ายได้สำเร็จแล้วครับ :D
ถ้าเราเอาความรู้นี้ไปใช้กับ SL4A บน Android ให้ส่งข้อมูลกลับมายังคอมพิวเตอร์ โดยผ่านเครือข่ายบน Wi-Fi เหมือนที่ผมทำ โดยที่อยู่ไอพีเครื่อง Android บน Wi-Fi ดูได้จาก Wi-Fi บนมือถือ Android ครับ
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)