1,學習這部分,應先了解一下osi 7層模型,tcp/ip四層,socket套接字等網路相關知識點。
python網路庫,urllib,urllib2,後者功能更強大一些。
import urllib2
import urllib
html = response.read()
print html
還有smtplib,email,cgi,httplib,ftplib,cookie等其他模組,現用現查即可。
2,socket模組
伺服器端demo
import socket
s = socket.socket() #
host = socket.gethostname()
port = 1234
s.bind((host,port))
s.listen(5)
while true:
c,addr = s.accept()
print 'client link from:',addr
c.send('hello, client. this is server')
c.close()
socketserver模組,簡化伺服器端程式設計。
from socketserver import tcpserver,streamrequesthandler
class handler(streamrequesthandler):
def handle(self): #處理放在handle方法中
addr = self.request.getpeername()
print 'get link from:',addr
self.wfile.write('welcome, link succeed')
server = tcpserver(('',1234),handler)
server.serve_forever() #begin to listen and handle link
#執行結果
bowen:~ bowen$ vimsocketserver_server.py
bowen:~ bowen$ python socketserver_server.py
get link from: ('192.168.42.184', 49533)
客戶端demo
import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host,port)) #連線伺服器
print s.recv(1024)
s.close()
伺服器與客戶端通訊demo
bowen:python bowen$ cat server.py
import socket
sock = socket.socket(socket.af_inet, socket.sock_stream) #create socket
sock.bind(('localhost',8001)) #bind ip and port
sock.listen(5) #start listening
while true:
conn,addr = sock.accept()
print 'link from:',addr
try:
conn.settimeout(5)
buff = conn.recv(1024)
if buff == '1':
conn.send('welcome to server') #send msg to client
else:
conn.send('plead go out')
except socket.timeout:
print 'time out exception'
conn.close() #close link
bowen:python bowen$ cat client.py
import socket
import time
sock = socket.socket()
sock.connect(('localhost',8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024) #recv msg from server
sock.close()
#執行結果
bowen:~ bowen$ vimsocketserver_server.py
bowen:~ bowen$ python socketserver_server.py
get link from: ('192.168.42.184', 49533)
3,非同步通訊
1,分叉方式(forkingmixin);server類提供了多連線處理,和資料傳輸服務。
from socketserver import tcpserver,forkingmixin,streamrequesthandler
class server(forkingmixin, tcpserver):
pass
class handler(streamrequesthandler):
def handle(self):
addr = self.request.getpeername()
print 'get link from:',addr
self.wfile.write('many links by fork')
if __name__ == '__main__':
server = server(('localhost',1234),handler)
server.serve_forever()
2,執行緒方式(threadingmixin);與分叉處理類似,區別僅在於server繼承的是threadingmixin
from socketserver import tcpserver,threadingmixin,streamrequesthandler
class server(threadingmixin, tcpserver):
pass
class handler(streamrequesthandler):
def handle(self):
addr = self.request.getpeername()
print 'get link from:',addr
self.wfile.write('many links in thread way')
if __name__ == '__main__':
server = server(('localhost',1234),handler)
server.serve_forever()
3,非同步i/o方式,select()方法用於對指定的檔案描述符進行監視,並在描述符改變時做出響應。還有poll()方法也可實現。
import socket, select
s = socket.socket()
s.bind(('localhost',1234))
s.listen(5)
inputs = [s] #store socket req
while true:
rs,ws,es = select.select(inputs,,) #use select()
for r in rs:
if r is s:
conn,addr = s.accept()
print 'get link form:',addr
else:
try:
data = r.recv(1024)
disconnected = not data
except socket.error:
disconnected = true
if disconnected:
print r.getpeername(),' disconnected'
inputs.remove(r)
else:
print data
Python學習筆記之 網路程式設計
客戶端 import socket 建立乙個socket s socket.socket socket.af inet,socket.sock stream 建立連線 s.connect 127.0.0.1 9999 接受或傳送 s.send s.recv 1024 s.close af inet指...
python網路程式設計筆記
socket 套接字 實現不同主機之間的程序間通訊,python中socket模組下的socket addressfamily,type 第乙個引數可以選擇af inet 用於internet程序間通訊 或af unix 用於同一臺機器程序通訊 通常用af inet type可以是 sock str...
Python網路程式設計 筆記
前言 python網路程式設計 介紹了網路程式設計基礎,並提供了 示例。很喜歡的一點是提供了乙個網路實驗環境。1.編碼與解碼 解碼 decoding 是在應用程式使用位元組時發生的。編碼 encoding 是程式將字串對外輸出時所實施的過程。2.路由 根據目的ip位址選擇將ip資料報發往何處就叫做路...