Basic Python 2: Python Network Programming

ก่อนจะเข้าสู่เรื่อง Python Network Programming ขอแวะมาที่ Error Handling และ Command Line Arguments กันแว้บบ..นึงนะครับ

Error Handling
การจัดการกับ error

จาก code ด้านล่าง มีการ random ค่าของ day เกิดขึ้นจาก function random.choice() จากการทำงาน เมื่อเข้า try ตัวแปร date ถูกเรียกใช้งาน หากเกิด TypeError ขึ้น เราจะดัก exception ที่เกิด TypeError เพื่อให้โปรแกรมของเรายังทำงานต่อไปได้ ยังมี exception อีกหลายแบบ ให้ลองเข้าไปศึกษาดูได้จาก https://docs.python.org/3/tutorial/errors.html

Error handling

Python Command Line Arguments
การรับค่า parameter จาก command line argument

argument ที่ถูกส่งเข้ามา จะถูกเก็บไว้ใน sys.argv และ index 0 จะถูก default เป็น ชื่อไฟล์ .py เสมอ โดย index ที่เราจะใช้งานได้นั้น จะเริ่มที่ index 1 เป็นต้นไป

แต่มีอีกวิธี ที่เราจะสามารถกำหนด format ของ argument เองได้ โดยเราจะใช้ package ที่ชื่อว่า getopt ซึ่งสามารถกำหนดใช้งาน option ได้ตามตัวอย่าง code ด้านล่าง

Parsing command-line arguments using getopt

Basic Python Network Programming

image form https://www.cloudflare.com

เนื้อหาในส่วนนี้ เราจะมาลองเขียน Network programming กันนะครับ โดย Protocal หลักๆ ที่นิยมใช้กัน ซึ่งผมจะยกตัวอย่าง มีดังนี้

- Python Network Programming: UDP Send and Recieve
- Python Network Programming: TCP Client - Server

Machine Info
วิธีดึง machine info ด้วย Python ให้ดูตัวอย่างจาก code ด้านล่าง โดย import library socket มาใช้งาน

Python Network Programming: Remote Machine Info

Python Network Programming: UDP Send and Recieve

ในส่วนนี้จะยกตัวอย่างการเขียน UDP Send และ Recieve ว่าเราต้อง import อะไรมาใช้งานบ้าง พร้อมทั้งโค้ดตัวอย่าง เพื่อนๆ สามารถลองไปเขียนตามดูได้นะครับ

Python Network Programming: UDP Receiving
สำหรับ UDP Receiving โมดูลที่ใช้ก็จะมีการ import socket เข้ามาใช้งาน จากนั้นก็ประกาศใช้งาน Local IP แล้วก็กำหนด Port ที่ต้องการใช้งาน ดังตัวอย่างตาม Code ด้านล่างครับ

Python Network Programming: UDP Sending
ฝั่งส่งก็ import module และกำหนด IP กับ Port แล้วก็เรียกใช้งาน ฟังก์ชันก์ socket.sondto ตามด้วย IP และ Port ดังตัวอย่างเลยนะครับ 
ปล. มีข้อสังเกตุตรงที่เราต้องเรียกใช้งานฟังก์ชัน encode() ด้วยนะครับ เนื่องจากต้องการแปลง string to byte ก่อนที่จะส่ง

หลังจากเราเขียน Code ของทั้งสองส่วนคือ ทั้ง Send และ Recieve เสร็จแล้ว ก็ลองรันดูผลลัพธ์ดูนะครับ ว่ามันสามารถส่ง Message หากันได้ไหม ลองไปประยุกต์ใช้งานต่อกันดูนะครับ

Python Network Programming: TCP Client — Server

หลังจากลองเขียน UDP ไปแล้ว เราก็มาต่อกันที่ TCP Client-Server กันดีกว่า module ที่ใช้ก็เหมือนเดิมครับ import socket เข้ามาลองดูตัวอย่างเลยแล้วกันนะครับ

Python Network Programming: TCP Server
เริ่มที่ฝั่ง Server ก่อน import socket เรียกใช้งาน threading โดยการ import threading เนื่องจากว่า หากเมื่อเรา Run Server แล้วมี Client เข้ามาเยอะๆ จะได้แตก Thread เพื่อไปรันงาน ของแต่ละ Client ได้โดยไม่ต้องรอกัน ลองดู Code ตัวอย่างด้านล่างเลยนะครับ

Python Network Programming: TCP Client
มาต่อที่ฝั่ง Client นะครับ config ไม่มีอะไรมาก ก็แค่กำหนด IP แล้วก็ Port ให้ตรงกับ Server ที่เราต้องการติดต่อเข้าไป ที่ฟังก์ชัน client.connect((‘IP’, Port)) หลังจากนั้นอยากจะส่งค่าอะไรไปก็ใช้งานฟังก์ชัน client.send() แค่นี้เองครับ ลองดู Code ด้านล่างเพื่อความเข้าใจนะครับ

หลังจากเขียน Code ของทั้ง Server และ Client กันเสร็จแล้ว ก็ทดลอง Run ดูผลลัพธ์ แล้วก็ลองเอาไปประยุกต์ใช้กับงานดูกันนะครับ

สำหรับเนื้อหาในส่วนที่ 2 ก็จบไปแล้วนะครับ เพื่อนๆติดปัญหา หรือสงสัยตรงไหน ก็เข้ามาสอบถามพูดคุยกันได้นะครับ

เดี๋ยวไปต่อเรื่อง ESP8266 With MicroPython กันในตอนหน้า

Link บทความที่เกี่ยวข้อง
- Basic Python 1
- ESP8266 With MicroPython Coming soon…