Results 1 to 6 of 6

Thread: เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!

  1. #1
    Senior Member
    Join Date
    Sep 2003
    Location
    Thailand
    Posts
    136


    เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!

    การติดต่อสื่อสารระหว่าง Client และ Server จำเป็นต้องเขียนโปรแกรมไว้สองฝั่ง คือ ฝั่ง Server และ Client ตามลำดับ ...

    โค๊ดต่อไปนี้จะช่วยให้มองเห็นความสามารถของไพธอนในการสร้างตัวเองเป็น Server และทำตัวเองเป็น Client ในเวลาเดียวกัน

    ขอให้พิจารณาโค๊ดต่อไปนี้ครับ
    ฝั่ง Server !!
    ====================
    import socket
    PORT = 8037

    service = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    service.bind(("", PORT))
    service.listen(1)

    print "listening on port", PORT

    while 1:
    channel, info = service.accept()
    print "connection from", info
    channel.send("HEllo")
    channel.close()

    =======================================
    โค๊ดในฝั่ง Client มีรายละเอียดดังนี้ :
    =======================================
    import socket

    # ระบุหมายเลข IP และหมายเลขพอร์ตของเครื่อง Server
    Host = "127.0.0.1"
    Port = 8037

    # สร้างการเชื่้อมต่อไปยังเครื่อง Server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((Host, Port))

    # อ่านข้อมูลจากเครื่อง Server จำนวน 5 ตัวอักษร(ไบต์)
    t = s.recv(5)
    s.close()

    # แสดงข้อมูลที่รับมาจากเครื่อง Server ให้ปรากฎที่จอภาพ
    print "Received : ",t , " Len : ", len(t)

    ==============================================
    การทำงานพอเป็นสังเขป :
    1. ให้เครื่อง Server รันสคริปต์ทิ้งเอาไว้
    2. เมื่อไรที่ Client เข้ามาที่เครื่องของเซอร์เวอร์ให้ทำงานตามเงื่อนไข

    #python server.py
    listening on port 8037

    ถ้าเครื่อง Client เรียกใช้คำสั่งต่อไปนี้
    #python client.py
    ผลลัพธ์คือ
    Received : HEllo Len : 5

    ในขณะที่ฝั่ง Server จะแสดงข้อความว่า :
    connection from ("xx.xx.xx.xx", xxxx)

    ในตัวอย่างนี้ได้ใช้โมดูล socket และกำหนดหมายเลขพอร์ทไว้ที่ 8037 ซึ่งเป็นหมายเลขที่กำหนดขึ้นโดยตัวโปรแกรมเมอร์เอง จากนั้นสร้างอินสแตนท์ชื่อ service ซึ่งถ่ายทอดมาจากคลาส socket.socket()

    อาร์กิวเมนต์ของการสร้างคลาส socket คือ socket.AF_INET และ socket.SOCK_STREAM เป็นการกำหนดข้อตกลงในการเชื่อมต่อแบบสตรีม

    ลำดับถัดมาผูกการให้บริการเข้ากับพอร์ท ด้วยคำสั่ง socket.bind() โดยมีอาร์กิวเมนต์สองตัวคือ สตริงเปล่า และตัวแปร PORT ซึ่งเก็บหมายเลขพอร์ท 8037 จากนั้นสั่ง listen() เพื่อให้แม่ข่ายรอตอบสนองเครื่องลูกข่าย

    ในขณะที่กำลังรอการติดต่อระหว่างเครื่องลูกข่าย อ็อบเจ็ค service จะเรียกฟังก์ชั่น accept() ซึ่งจะคืนค่าเป็นลีสต์ 2 อัน อันแรกคือ ช่องทางการเชื่อมต่อ ผู้เขียนให้เก็บไว้ในตัวแปร channel ในขณะที่ลีสต์อีกตัวหนึ่งสำหรับข้อมูลจากเครื่องลูกข่าย ผู้เขียนกำหนดไว้ในตัวแปร info

    เมื่อมีการร้องขอจากลูกข่ายจะแสดงคำว่า "connection from" , info ซึ่งตัวแปร info จะเก็บหมายเลข IP และพอร์ทที่ใช้เชื่อมต่อจากลูกข่าย

    ลำดับถัดมาส่งข้อความคำว่า "HEllo" ออกไปยังช่องทางที่ได้รับการเชื่่อมต่อจากแม่ข่ายและลูกข่าย เมื่อส่งข้อความเสร็จเรียบร้อย ให้ปิดช่องทางการสื่อสาร

    พิจารณาที่ฝั่งลูกข่าย เมื่อเรียกคำสั่ง python client.py ไพธอนจะแปลความดังรายละเอียดต่อไปนี้
    ตัวแปร Host ใช้เก็บหมายเลข IP Address ของเครื่องแม่ข่าย (ค่า default คือ 127.0.0.1 สำหรับเครื่องที่จำลองการเชื่อมต่อเน็ตเวอร์ค)

    ตัวแปร Port กำหนดให้ตรงกันกับพอร์ทที่แม่ข่ายกำหนดไว้ จากนั้น สร้างอินสแตนท์ของคลาส socket.socket() โดยผู้เขียนให้ชื่ออ็อบเจ็ค s การสร้างอินสแตนท์ทำเหมือนสคริปต์ฝั่งแม่ข่าย

    จากนั้นเรียกใช้คำสั่ง connect() ภายในอ็อบเจ็ค s โดยระบุอาร์กิวเมนต์แรกคือหมายเลข IP Address ของเครื่องแม่ข่าย และอาร์กิวเมนต์ที่สองคือหมายเลขพอร์ทที่ใช้เชื่อมต่อกับแม่ข่าย

    ลำดับถัดมาทำการอ่านข้อมูลออกมาจากเครื่องแม่ข่ายเป็นจำนวน 5 ไบต์ ด้วยคำสั่ง recv() และเก็บไว้ภายในตัวแปร t จากนั้นปิดคอนเน็คชั่นด้วยคำสั่ง close()

    ผลลัพธ์ที่เก็บไว้ในตัวแปร t สามารถนำไปใช้งานต่อไปได้ ในตัวอย่างนี้แสดงให้ปรากฎบนจอภาพคอมพิวเตอร์ และแสดงจำนวนความยาวของตัวแปร t ซึ่งมีค่า 5 ไบต์

    สำหรับวันนี้ คงทำให้เพื่อน ๆ ได้ไอเดียในการสร้างแอพลิเคชั่นไว้ใช้งานเองในแบบ Client/Server นะครับ..

    พบกันใหม่โอกาสหน้า.. สวัสดี.. ครับ..บบ...บ

  2. #2
    Junior Member
    Join Date
    Mar 2004
    Location
    Thailand
    Posts
    12


    Re: เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!

    พี่ nprotech ครับ ขอร้องหล่ะครับ ออกหนังสือสักทีเถอะครับ อยากอ่านจะแย่อยู่แล้ว

  3. #3
    Senior Member
    Join Date
    Sep 2003
    Location
    Thailand
    Posts
    136


    Re: เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!

    เนื่องจากตอนนี้ผมทำงานเกี่ยวกับออราเคิล..
    ทำให้ไม่มีเวลาเขียนหนังสือต่อเลย ตอนนี้ผมโพสตอบเมื่อเวลาสามทุ่มครึ่ง เพราะผมพึ่งเลิกงาน !!

    ผมได้ใช้ไพธอนเขียนโปรแกรมเพื่อตรวจสอบว่ามี Column ใดบ้างที่สร้างจาก ER-WIN3.5 ที่ยังไม่ได้ถูกเขียนคอมเมนต์ ซึ่งช่วยลดภาระงานให้กับบริษัทได้อย่างมาก !!


    โปรเจ็คถัดมาผมได้เขียนโปรแกรมเพื่อสังเคราะห์ Items ที่สร้างขึ้นจากโปรแกรม Oracle Form Builder เพื่ออ่านชื่อบล็อก อ่านไอเท็ม อ่านรายละเอียดของไอเท็มเท่าที่ต้องการ จากนั้นสังเคราะห์เป็นเอกสาร .. ช่วยให้บริษัทไม่ถูกปรับไปได้ประมาณ 4 แสนบาท (ถ้าใช้เวลาทำประมาณ 2-3วัน)


    วันก่อนผมได้เข้าไปคุยกับผู้บริหาร (อายุ 34)
    ผม : พูดกับผู้บริหารว่าจะสร้างสร้างเอกสารให้เป็น Microsoft Word ด้วยอัตโนมัติ โดยไม่ต้องใช้คนทำ !! (มันจะลดภาระงานอย่างมากครับ)..
    ผู้จัดการถามกลับว่า คุณใช้ภาษาอะไร ?
    ผมตอบว่าใช้ไพธอนครับ..
    ผู้บริหาร : คุณจะใช้ภาษาห่าาา.. เฮี้..ย อะไรก็ช่าง ผมไม่สนใจ ขอให้ลดโหลดผมได้พอ !!
    ผม : ได้ฟังดังนั้น อึ้ง !!
    กำลังตัดสินใจจะลาออกสิ้นเดือนนี้ครับ.. !!

    ถ้าใครมีงานให้ผมทำ ช่วยแนะนำเข้ามาด้วยนะครับ !! (ขอบคุณมากครับ)
    ถ้าผมมีเวลาจะพยายามเขียนหนังสือให้เสร็จในเร็ววันนะครับ..

  4. #4
    Junior Member
    Join Date
    Dec 2006
    Posts
    0


    Re: เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!


  5. #5
    Senior Member
    Join Date
    Sep 2003
    Location
    Thailand
    Posts
    136


    Re: เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!

    ผมออกแล้วครับ ตอนนี้ผมทำงานที่ใหม่เรียบร้อยล่ะครับ..
    ด้านอิเล็กทรอนิกส์และคอนโทรลเลอร์ครับ !!

  6. #6
    Senior Member
    Join Date
    Sep 2003
    Location
    Thailand
    Posts
    136


    Re: เขียนโปรแกรม Client / Server ง่าย ๆ สไตล์ไพธอน !!

    ผมกำลังทำหนังสือต่อไปครับ.. เดินหน้า..
    ได้รู้จักโมดูลมากขึ้นครับ.. หนังสือออกแน่ ๆ แต่อยากมีคนช่วยเหลือ ทั้งสำนวนและอะไรต่าง ๆ เช่น จัดพิมพ์ เหมือนกันครับ ทำคนเดียวหนักมากครับ !!

Similar Threads

  1. [Hack] Keylogger Client/Server.
    By WareWolf in forum Security Tools
    Replies: 0
    Last Post: 02-10-2009, 09:59 PM
  2. ว่าด้วยเรื่อง เทคนิคการเก็บ Log ง่าย ๆ ใน Plattform Windows Server
    By Leviathan in forum บทความ คอมพิวเตอร์ ทัวไป
    Replies: 0
    Last Post: 04-09-2009, 09:59 PM
  3. [VB.net 2005] Client/server/mailer SOURCES
    By snapter in forum Security Tools
    Replies: 0
    Last Post: 14-02-2008, 11:24 PM
  4. Replies: 1
    Last Post: 03-01-2008, 08:00 PM
  5. Replies: 0
    Last Post: 11-07-2006, 08:58 AM

Members who have read this thread : 0

Actions : (View-Readers)

There are no names to display.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •