Latest web development tutorials

การเขียนโปรแกรม Python เครือข่าย

งูหลามมีสองระดับของการให้บริการการเข้าถึงเครือข่าย :

  • บริการเครือข่ายในระดับต่ำเพื่อสนับสนุนซ็อกเก็ตขั้นพื้นฐานก็ให้มาตรฐาน BSD Sockets API คุณสามารถเข้าถึงทุกวิธีการของอินเตอร์เฟซซ็อกเก็ตระบบปฏิบัติการพื้นฐาน
  • ระดับสูงของเครือข่ายบริการโมดูล SocketServer จะให้ระดับเซิร์ฟเวอร์กลางคุณสามารถลดความซับซ้อนของการพัฒนาของเซิร์ฟเวอร์เครือข่าย

ซ็อกเก็ตคืออะไร?

ซ็อกเก็ตที่เรียกว่า "ซ็อกเก็ต" แอพลิเคชันมักจะออกโดย "ซ็อกเก็ต" เพื่อการร้องขอหรือเครือข่ายการตอบสนองต่อการร้องขอเพื่อให้กระบวนการระหว่างโฮสต์หรือระหว่างคอมพิวเตอร์บนสามารถสื่อสาร


ซ็อกเก็ต () ฟังก์ชัน

งูใหญ่เราจะใช้ซ็อกเก็ต () ฟังก์ชั่นในการสร้างซ็อกเก็ต, ไวยากรณ์เป็นดังนี้:

socket.socket([family[, type[, proto]]])

พารามิเตอร์

  • ครอบครัว: ครอบครัวสามารถสร้างซ็อกเก็ตหรือ AF_INET AF_UNIX
  • ประเภท: ประเภทซ็อกเก็ตสามารถเชื่อมต่อที่มุ่งเน้นหรือ connectionless เข้า SOCK_STREAM หรือ SOCK_DGRAM
  • โปรโตคอล: โดยทั่วไปไม่เต็มเริ่มต้นที่ศูนย์

วัตถุซ็อกเก็ต (built-in) วิธีการ

ฟังก์ชัน ลักษณะ
ซ็อกเก็ตเซิร์ฟเวอร์
s.bind () ที่อยู่ผูก (โฮสต์พอร์ต) เพื่อซ็อกเก็ตที่ AF_INET ในรูปแบบของ tuple (โฮสต์พอร์ต) ระบุที่อยู่
s.listen () เริ่ม TCP ฟัง ค้างที่ระบุไว้ก่อนที่จะปฏิเสธการเชื่อมต่อระบบปฏิบัติการที่สามารถระงับจำนวนสูงสุดของการเชื่อมต่อ ค่านี้เป็นอย่างน้อย 1 ใช้งานมากที่สุดที่สามารถตั้งค่า 5
s.accept () ยอมรับ passive ของการเชื่อมต่อลูกค้า TCP (ปิดกั้น) รอการมาถึงของ
ซ็อกเก็ตไคลเอนต์
s.connect () การเชื่อมต่อเซิร์ฟเวอร์การเริ่มต้นใช้งาน TCP socket.error อยู่ทั่วไปของรูปแบบของสิ่งอันดับ (ชื่อโฮสต์พอร์ต) ว่าข้อผิดพลาดการเชื่อมต่อข้อผิดพลาดจะถูกส่งกลับ
s.connect_ex () เชื่อมต่อ () รุ่นที่ขยายจากฟังก์ชั่นส่งกลับรหัสข้อผิดพลาดเมื่อมีข้อผิดพลาดแทนการขว้างปาข้อยกเว้น
ฟังก์ชั่นซ็อกเก็ตวัตถุประสงค์สาธารณะ
s.recv () รับข้อมูล TCP ข้อมูลที่ถูกส่งกลับเป็นสตริงระบุจำนวนเงินสูงสุดของข้อมูลที่จะได้รับ bufsize ให้ข้อมูลเพิ่มเติมเกี่ยวกับธงข้อความสามารถมักจะถูกละเลย
s.send () ส่งข้อมูล TCP ส่งสตริงข้อมูลเพื่อการเชื่อมต่อซ็อกเก็ต ค่าตอบแทนเป็นจำนวนไบต์ที่จะส่งตัวเลขนี้อาจจะน้อยกว่าสตริงไบต์
s.sendall () ข้อมูล TCP ส่งเสร็จสมบูรณ์แล้วส่งข้อมูล TCP สมบูรณ์ มันจะส่งสตริงข้อมูลเพื่อการเชื่อมต่อซ็อกเก็ต แต่ก่อนที่จะกลับจะพยายามที่จะส่งข้อมูลทั้งหมด กลับประสบความสำเร็จไม่มีข้อยกเว้นความล้มเหลวที่จะถูกโยนทิ้ง
s.recvform () ได้รับข้อมูล UDP () คล้ายกับ recv แต่ค่าตอบแทนเป็น (ข้อมูลที่อยู่) ประเด็นข้อมูลที่เป็นสตริงที่มีข้อมูลที่ได้รับข้อมูลที่อยู่จะถูกส่งไปอยู่ซ็อกเก็ต
s.sendto () ส่งข้อมูล UDP, ส่งข้อมูลไปยังซ็อกเก็ตที่อยู่ในรูปแบบของ (ipaddr พอร์ต) tuple ที่ระบุที่อยู่ห่างไกล ค่าตอบแทนเป็นจำนวนไบต์ที่ส่ง
s.close () ปิดซ็อกเก็ต
s.getpeername () ผลตอบแทนที่อยู่ระยะไกลเชื่อมต่อซ็อกเก็ต ค่าตอบแทนมักจะ tuple A (ipaddr พอร์ต)
s.getsockname () ผลตอบแทนที่ได้อยู่เองซ็อกเก็ตของ มักจะเป็น tuple (ipaddr พอร์ต)
s.setsockopt (ระดับ optName ค่า) กำหนดค่าของตัวเลือกซ็อกเก็ตที่กำหนด
s.getsockopt (ระดับ optName [.buflen]) ค่าตอบแทนของตัวเลือกซ็อกเก็ต
s.settimeout (หมดเวลา) ชุดซ็อกเก็ตเป็นเวลาการทำงานหมดเวลาหมดเวลาเป็นจำนวนจุดลอยตัวในไม่กี่วินาที ไม่มีค่าบ่งชี้ระยะเวลาที่ไม่มีเวลาออก โดยทั่วไปแล้วระยะเวลาการหมดเวลาก็ควรจะสร้างชุดซ็อกเก็ตเพราะพวกเขาอาจจะใช้ในการดำเนินการเชื่อมต่อ (เช่นการเชื่อมต่อ ())
s.gettimeout () ส่งกลับค่าของระยะเวลาการหมดเวลาปัจจุบันในไม่กี่วินาทีถ้ามีระยะเวลาการหมดเวลาไม่มีการกำหนดผลตอบแทนไม่
s.fileno () ผลตอบแทนที่ได้อธิบายไฟล์ซ็อกเก็ต
s.setblocking (ธง) ถ้าธงเป็น 0 ซ็อกเก็ตที่ถูกกำหนดเป็นโหมดที่ไม่ใช่การปิดกั้นมิฉะนั้นซ็อกเก็ตไปยังโหมดการปิดกั้น (ค่าเริ่มต้น) โหมด non-blocking ถ้าคุณโทร recv () ไม่พบข้อมูลใด ๆ หรือส่งโทร () ไม่สามารถส่งข้อมูลได้ทันทีก็จะทำให้เกิดข้อยกเว้น socket.error
s.makefile () สร้างเอกสารที่เกี่ยวข้องในการเชื่อมต่อกับซ็อกเก็ต

ตัวอย่างง่ายๆ

เซิร์ฟเวอร์

เราใช้ฟังก์ชั่นซ็อกเก็ตโมดูลซ็อกเก็ตในการสร้างวัตถุซ็อกเก็ตวัตถุซ็อกเก็ตสามารถเรียกฟังก์ชั่นอื่น ๆ ที่จะตั้งค่าบริการซ็อกเก็ต

ตอนนี้เราสามารถระบุบริการโดยการเรียกผูก (ชื่อโฮสต์พอร์ต)พอร์ตฟังก์ชั่น (พอร์ต)

ต่อไปเราเรียกวิธีการยอมรับของวัตถุซ็อกเก็ตวิธีการรอการเชื่อมต่อลูกค้าและกลับวัตถุการเชื่อมต่อที่แสดงถึงการเชื่อมต่อไปยังลูกค้า

รหัสที่สมบูรณ์จะเป็นดังนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问本教程!')
    c.close()                # 关闭连接

ไคลเอนต์

ต่อไปเราเขียนเป็นลูกค้าที่ง่ายในการเชื่อมต่อกับอินสแตนซ์บริการที่สร้างขึ้นดังกล่าวข้างต้น หมายเลขพอร์ตคือ 12345

socket.connect (hosname พอร์ต) วิธีการเปิดการเชื่อมต่อ TCP ไปยังโฮสต์สำหรับพอร์ตชื่อโฮสต์ผู้ให้บริการท่าเรือเมื่อเชื่อมต่อแล้วเราสามารถโพสต์ข้อมูลจากเซิร์ฟเวอร์จำหลังจากเสร็จสิ้นการดำเนินการจะต้องมีการปิดการเชื่อมต่อ

รหัสที่สมบูรณ์จะเป็นดังนี้:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

ตอนนี้เราได้มีการเปิด terminal, ขั้วครั้งแรกที่ดำเนินการไฟล์ server.py:

$ python server.py

ขั้วที่สองดำเนินไฟล์ client.py:

$ python client.py 
欢迎访问本教程!

นี่เป็นครั้งแรกของเราและจากนั้นเปิดสถานีคุณจะเห็นข้อมูลต่อไปนี้คือการส่งออก:

连接地址: ('192.168.0.118', 62461)

โมดูลหลามอินเทอร์เน็ต

นี่คือบางส่วนเขียนโปรแกรมเครือข่ายโมดูลหลามสำคัญ:

ข้อตกลง ฟังก์ชั่นที่มีประโยชน์ หมายเลขพอร์ต โมดูลหลาม
HTTP การเข้าถึงเว็บ 80 httplib, urllib, xmlrpclib
NNTP การอ่านและการโพสต์บทความข่าวที่เรียกว่า "โพสต์" 119 nntplib
FTP การถ่ายโอนไฟล์ 20 ftplib, urllib
SMTP ส่ง Email 25 smtplib
POP3 ได้รับจดหมาย 110 poplib
IMAP4 ได้รับจดหมาย 143 imaplib
Telnet บรรทัดคำสั่ง 23 telnetlib
หนูขนาดใหญ่ ค้นหาข้อมูล 70 gopherlib, urllib

รายละเอียดเพิ่มเติมสามารถพบได้ในเว็บไซต์อย่างเป็นทางการของ งูหลามห้องสมุดซ็อกเก็ตและโมดูล