24 มกราคม 2558

Published มกราคม 24, 2558 by with 2 comments

เขียนโปรแกรมเครือข่าย 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
โค้ด server.py

ในการรัน ต้องรันไฟล์ 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 ตามที่ต้องการครับ

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

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

  1. โค้ดserver.pyเรียงลำดับผิดค่า

    ตอบลบ
  2. 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() #จบการเชื่อมต่อ <== จากตัวอย่างวรรคนี้ผิดครับ

    ตอบลบ

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