รายละเอียดเบื้องต้นของโมดูล Socket ใน Python :
socket.listen() – listen สำหรับการเชื่อมต่อขาเข้า
socket.accept() – ยอมรับการเชื่อมต่อขาเข้า
socket.recv() – ส่งกลับข้อมูลที่เข้ามาเป็น string
socket.send() – ส่งข้อมูลไปยังไคลเอนต์ socket
socket.close() – ปิดซ็อกเก็ต
ผมลองเขียนโปรแกรมดูตามนี้ครับ
server.py
import socket
host = "127.0.0.1" #กำหนดค่า host ที่เชื่อมต่อ
port = 8081 #กำหนดค่าพอร์ตในการสื่อสาร
addr = (host,port) #รวม host กับค่าพอร์ตเข้าเป็น tuple เดียวกัน
bufsize = 4096 #ขนาดบัฟเฟอร์ข้อมูล
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #สร้าง object ในการเชื่อมต่อ socket
print("Socket created")
server.bind((addr)) #เชื่อมต่อ
server.listen(5) #5 เป็นจำนวนสูงสุดของการเชื่อมต่อคิวที่เราจะอนุญาต
conn, addr = server.accept() #รับข้อมูลการเชื่อมต่อขาเข้า
print('Connection address:', addr) #แสดงลายละเอียดของ client ที่เชื่อมต่อมา
count = 0
while (count <= 5):
data = conn.recv(bufsize)
if not data: break
print("received data:", data) #แสดงข้อมูลที่ส่งมา
conn.send(data) # echo
count = (count + 1)
conn.close() #จบการเชื่อมต่อ
client.py
import socket
host = "127.0.0.1" #กำหนดค่า host ที่เชื่อมต่อ
port = 8081 #กำหนดค่าพอร์ตในการสื่อสาร
addr = (host,port) #รวม host กับค่าพอร์ตเข้าเป็น tuple เดียวกัน
bufsize = 4096 #ขนาดบัฟเฟอร์ข้อมูล
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((addr)) #เชื่อมต่อ
count = 0
while (count <= 5):
MESSAGE = input("Input:")
client.send(MESSAGE.encode('utf-8')) #ส่งข้อมูลโดยก่อนส่งได้เข้ารหัสตัวอักษรเป็น utf-8
data = client.recv(bufsize) #ดึงผลลัพธ์การส่งข้อมูล
print("received data:", data) #แสดงผลลัพธ์การส่งข้อมูล
count = (count + 1)
client.close() #จบการเชื่อมต่อ
เวลารันให้รัน server.py ก่อนนะครับ แล้วค่อยรัน client.py จากตัวอย่างโปรแกรมข้างบนผมใช้เพียงโมดูล socket นอกจากนั้น นับตั้งแต่ Python 2.6 ขึ้นมาได้มาโมดูลหนึ่งที่สำหรับใช้ทำ server โดยเฉพาะ นั้นคือ โมดูล socketserver อ่านรายละอียดเพิ่มเติมได้ที่ https://docs.python.org/3/library/socketserver.html และอ่านรายละเอียดการใช้งาน socket ใน Python ได้ที่ https://docs.python.org/3.4/howto/sockets.html
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)