24 มกราคม 2558

Published 1/24/2558 by with 0 comment

เขียนโปรแกรมเครือข่าย Socket ใน Python : ตอนที่ 1 เริ่มต้น

บทความนี้จะพาผู้อ่านไปรู้จัก  Socket ใน Python และลองเขียนโปรแกรมเครือข่าย Socket ใน Python กันครับ
Socket ในความหมายภาษาไทยแบบง่าย ๆ หมายถึง เต้ารับที่สามาเอาอุปกรณ์มาเชื่อมต่อกันได้ เหมือนเต้ารับของปลั๊กไฟ ในการเขียนโปรแกรม Socket คือ การสื่อสารระหว่างโปรแกรมบนเครือข่าย ในการเขียนโปรแกรมเชื่อมต่อการสื่อสารนั้นเราต้องใช้ Socket API โดยต้องระบุถึงโปรแกรมผ่าน Port Number และที่อยู่ของเครื่องอีกเครื่องหนึ่งบนเครือข่ายด้วย IP Address
สรุป
Socket Address = IP Address + Port Number

ในการเขียนโปรแกรมในปัจจุบัน ภาษาคอมพิวเตอร์ต่าง ๆ ได้รองรับ Socket กันไปนานแล้ว เช่น Java , Python , C/C++ เป็นต้น การใช้งาน Socket จึงไม่ได้จำกัดแค่ภาษาใดภาษาหนึ่ง

ในการเขียนโปรแกรมภาษา Python ได้รวม Socket API เข้ามาตั้งแต่ต้นแล้ว เวลาเรียกใช้งานต้อง
import socket

เข้ามาในโค้ดโปรแกรม ผมจะพาผู้อ่านไปลองเขียนโปรแกรมเครือข่าย Socket ส่งข้อมูลข้ามเครือข่ายกันครับ

ในการรับส่งข้อมูล ต้องมีผู้ส่งสาร สื่อ และผู้รับสาร โดยส่ง และรับข้อมูล โดย TCP ใน Python

โค้ด client.py

[python]
import socket

TCP_IP = "127.0.0.1"
TCP_PORT = 8081
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP,TCP_PORT)) #เชื่อมต่อ
s.send(MESSAGE.encode('utf-8')) #ส่งข้อมูลโดยก่อนส่งได้เข้ารหัสตัวอักษรเป็น utf-8
data = s.recv(BUFFER_SIZE) #ดึงผลลัพธ์การส่งข้อมูล
s.close() #จบการเชื่อมต่อ

print("received data:", data) #แสดงผลลัพธ์การส่งข้อมูล
[/python]

โค้ด server.py

[python]
import socket
TCP_IP = "127.0.0.1"
TCP_PORT = 8081
BUFFER_SIZE = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT)) #เชื่อมต่อ
s.listen(1)

conn, addr = s.accept() #รอรับข้อมูลที่ส่งมาจาก client.py
print('Connection address:', addr) #แสดงลายละเอียดของ client ที่เชื่อมต่อมา
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print("received data:", data) #แสดงข้อมูลที่ส่งมา
conn.send(data) # echo
conn.close() #จบการเชื่อมต่อ
[/python]

ในการรัน ต้องรันไฟล์ server.py ก่อนครับ เพราะ server.py เป็นไฟล์เซิร์ฟเวอร์สำหรับรับและส่งข้อมูล แล้วจึงค่อยรัน client.py

ผลลัพธ์

ไฟล์ server.py
Connection address: ('127.0.0.1', 60447)
received data: b'Hello, World!'

ไฟล์ client.py
received data: b'Hello, World!'

จากโปรแกรมข้างบนจะพบว่า ผมได้กำหนดค่า IP Address เป็น 127.0.0.1 นั้นคือส่งข้อมูลภายในเครื่อง เพื่อทดสอบโปรแกรมและกำหนดค่า Port Number เป็น 8081 โดย Port Number ต้องห้ามซ้ำกับ Port Number ที่มีอยู่ในระบบครับ หากเอาไปใช้งานผ่านเครือข่ายให้แก้ IP Address และ Port Number ตามที่ต้องการครับ

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)