Python - การเขียนโปรแกรมเครือข่าย
Python ให้การเข้าถึงบริการเครือข่ายสองระดับ ในระดับต่ำคุณสามารถเข้าถึงการสนับสนุนซ็อกเก็ตพื้นฐานในระบบปฏิบัติการพื้นฐานซึ่งช่วยให้คุณใช้งานไคลเอนต์และเซิร์ฟเวอร์สำหรับทั้งโปรโตคอลที่เน้นการเชื่อมต่อและไม่มีการเชื่อมต่อ
Python ยังมีไลบรารีที่ให้การเข้าถึงระดับที่สูงขึ้นไปยังโปรโตคอลเครือข่ายระดับแอปพลิเคชันเฉพาะเช่น FTP, HTTP และอื่น ๆ
บทนี้จะช่วยให้คุณเข้าใจแนวคิดที่มีชื่อเสียงที่สุดในระบบเครือข่าย - การเขียนโปรแกรมซ็อกเก็ต
Sockets คืออะไร?
ซ็อกเก็ตเป็นจุดสิ้นสุดของช่องทางการสื่อสารแบบสองทิศทาง ซ็อกเก็ตอาจสื่อสารภายในกระบวนการระหว่างกระบวนการบนเครื่องเดียวกันหรือระหว่างกระบวนการในทวีปต่างๆ
อาจนำซ็อกเก็ตไปใช้กับแชนเนลประเภทต่างๆ: ซ็อกเก็ตโดเมน Unix, TCP, UDP และอื่น ๆ ซ็อกเก็ตห้องสมุดให้เรียนที่เฉพาะเจาะจงสำหรับการจัดการระบบขนส่งทั่วไปเช่นเดียวกับอินเตอร์เฟซสำหรับการจัดการทั่วไปส่วนที่เหลือ
Sockets มีคำศัพท์ของตัวเอง -
ซีเนียร์ | ข้อกำหนดและคำอธิบาย |
---|---|
1 | Domain ตระกูลของโปรโตคอลที่ใช้เป็นกลไกการขนส่ง ค่าเหล่านี้เป็นค่าคงที่เช่น AF_INET, PF_INET, PF_UNIX, PF_X25 เป็นต้น |
2 | type ประเภทของการสื่อสารระหว่างปลายทางทั้งสองโดยทั่วไปคือ SOCK_STREAM สำหรับโปรโตคอลที่เน้นการเชื่อมต่อและ SOCK_DGRAM สำหรับโปรโตคอลที่ไม่มีการเชื่อมต่อ |
3 | protocol โดยทั่วไปเป็นศูนย์อาจใช้เพื่อระบุรูปแบบของโปรโตคอลภายในโดเมนและประเภท |
4 | hostname ตัวระบุของอินเทอร์เฟซเครือข่าย -
|
5 | port เซิร์ฟเวอร์แต่ละตัวจะรับฟังไคลเอ็นต์ที่เรียกใช้พอร์ตอย่างน้อยหนึ่งพอร์ต พอร์ตอาจเป็นหมายเลขพอร์ต Fixnum สตริงที่มีหมายเลขพอร์ตหรือชื่อของบริการ |
ซ็อกเก็ตโมดูล
ในการสร้างซ็อกเก็ตคุณต้องใช้ฟังก์ชัน socket.socket () ที่มีอยู่ในโมดูลซ็อกเก็ตซึ่งมีไวยากรณ์ทั่วไป -
s = socket.socket (socket_family, socket_type, protocol=0)
นี่คือคำอธิบายของพารามิเตอร์ -
socket_family - นี่คือ AF_UNIX หรือ AF_INET ตามที่อธิบายไว้ก่อนหน้านี้
socket_type - นี่คือ SOCK_STREAM หรือ SOCK_DGRAM
protocol - โดยปกติจะถูกปล่อยทิ้งไว้โดยเริ่มต้นเป็น 0
เมื่อคุณมีวัตถุซ็อกเก็ตแล้วคุณสามารถใช้ฟังก์ชันที่จำเป็นเพื่อสร้างโปรแกรมไคลเอนต์หรือเซิร์ฟเวอร์ของคุณ ต่อไปนี้เป็นรายการฟังก์ชันที่จำเป็น -
วิธีการซ็อกเก็ตเซิร์ฟเวอร์
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | s.bind() วิธีนี้ผูกแอดเดรส (ชื่อโฮสต์คู่หมายเลขพอร์ต) กับซ็อกเก็ต |
2 | s.listen() วิธีนี้ตั้งค่าและเริ่มตัวฟัง TCP |
3 | s.accept() สิ่งนี้ยอมรับการเชื่อมต่อไคลเอนต์ TCP แบบไม่อดทนรอจนกว่าการเชื่อมต่อจะมาถึง (การบล็อก) |
วิธีการซ็อกเก็ตไคลเอนต์
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | s.connect() วิธีนี้เริ่มการเชื่อมต่อเซิร์ฟเวอร์ TCP อย่างแข็งขัน |
วิธีการทั่วไปของซ็อกเก็ต
ซีเนียร์ | วิธีการและคำอธิบาย |
---|---|
1 | s.recv() วิธีนี้ได้รับข้อความ TCP |
2 | s.send() วิธีนี้ส่งข้อความ TCP |
3 | s.recvfrom() วิธีนี้ได้รับข้อความ UDP |
4 | s.sendto() วิธีนี้ส่งข้อความ UDP |
5 | s.close() วิธีนี้จะปิดซ็อกเก็ต |
6 | socket.gethostname() ส่งคืนชื่อโฮสต์ |
เซิร์ฟเวอร์ที่เรียบง่าย
ในการเขียนอินเทอร์เน็ตเซิร์ฟเวอร์เราใช้ไฟล์ socketฟังก์ชั่นที่มีอยู่ในโมดูลซ็อกเก็ตเพื่อสร้างวัตถุซ็อกเก็ต จากนั้นอ็อบเจ็กต์ซ็อกเก็ตจะถูกใช้เพื่อเรียกใช้ฟังก์ชันอื่น ๆ เพื่อตั้งค่าเซิร์ฟเวอร์ซ็อกเก็ต
ตอนนี้โทร bind(hostname, port)ฟังก์ชันเพื่อระบุพอร์ตสำหรับบริการของคุณบนโฮสต์ที่กำหนด
จากนั้นเรียกใช้วิธีการยอมรับของวัตถุที่ส่งคืน วิธีนี้รอจนกว่าไคลเอ็นต์จะเชื่อมต่อกับพอร์ตที่คุณระบุจากนั้นส่งคืนอ็อบเจ็กต์การเชื่อมต่อที่แสดงถึงการเชื่อมต่อกับไคลเอ็นต์นั้น
#!/usr/bin/python # This is server.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.bind((host, port)) # Bind to the port
s.listen(5) # Now wait for client connection.
while True:
c, addr = s.accept() # Establish connection with client.
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close() # Close the connection
ลูกค้าธรรมดา
ให้เราเขียนโปรแกรมไคลเอนต์ที่ง่ายมากซึ่งเปิดการเชื่อมต่อกับพอร์ต 12345 และโฮสต์ที่กำหนด นี่เป็นเรื่องง่ายมากในการสร้างไคลเอนต์ซ็อกเก็ตโดยใช้ฟังก์ชันโมดูลซ็อกเก็ตของ Python
socket.connect(hosname, port )เปิดเชื่อมต่อ TCP ชื่อโฮสต์บนพอร์ต เมื่อคุณเปิดซ็อกเก็ตแล้วคุณสามารถอ่านได้เหมือนกับอ็อบเจ็กต์ IO ใด ๆ เมื่อเสร็จแล้วอย่าลืมปิดเช่นเดียวกับที่คุณปิดไฟล์
รหัสต่อไปนี้เป็นไคลเอนต์ที่ง่ายมากที่เชื่อมต่อกับโฮสต์และพอร์ตที่กำหนดอ่านข้อมูลใด ๆ ที่มีอยู่จากซ็อกเก็ตแล้วออก -
#!/usr/bin/python # This is client.py file
import socket # Import socket module
s = socket.socket() # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345 # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close() # Close the socket when done
ตอนนี้เรียกใช้ server.py นี้ในพื้นหลังจากนั้นเรียกใช้บน client.py เพื่อดูผลลัพธ์
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Got connection from ('127.0.0.1', 48437)
Thank you for connecting
โมดูลอินเทอร์เน็ต Python
รายการโมดูลที่สำคัญบางอย่างในการเขียนโปรแกรม Python Network / Internet
มาตรการ | ฟังก์ชันทั่วไป | หมายเลขพอร์ต | โมดูล Python |
---|---|---|---|
HTTP | หน้าเว็บ | 80 | HTTplib, urllib, xmlrpclib |
NNTP | ข่าว Usenet | 119 | nntplib |
FTP | การถ่ายโอนไฟล์ | 20 | ftplib, urllib |
SMTP | การส่งอีเมล | 25 | smtplib |
POP3 | กำลังเรียกอีเมล | 110 | ป๊อปลิบ |
IMAP4 | กำลังเรียกอีเมล | 143 | imaplib |
Telnet | บรรทัดคำสั่ง | 23 | เทลเน็ตลิบ |
โกเฟอร์ | การถ่ายโอนเอกสาร | 70 | gopherlib, urllib |
โปรดตรวจสอบไลบรารีทั้งหมดที่กล่าวถึงข้างต้นเพื่อทำงานกับโปรโตคอล FTP, SMTP, POP และ IMAP
อ่านเพิ่มเติม
นี่เป็นการเริ่มต้นอย่างรวดเร็วด้วย Socket Programming มันเป็นเรื่องที่มากมาย ขอแนะนำให้ไปที่ลิงค์ต่อไปนี้เพื่อดูรายละเอียดเพิ่มเติม -
การเขียนโปรแกรมระบบปฏิบัติการยูนิกซ์ซ็อกเก็ต
งูหลามซ็อกเก็ตและห้องสมุดโมดูล