25 มกราคม 2558

Published มกราคม 25, 2558 by with 0 comment

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

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


รายละเอียดเบื้องต้นของโมดูล 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 ความคิดเห็น:

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

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