Python筆記之網路程式設計

2021-06-26 14:34:01 字數 4335 閱讀 3345

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資料報發往何處就叫做路...