python 網(wǎng)絡(luò)編程常用代碼段
服務(wù)器端代碼:
# -*- coding: cp936 -*-
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#初始化socket
sock.bind(("127.0.0.1", 8001))#綁定本機(jī)地址,8001端口
sock.listen(5)#等待客戶連接
while True:
print "waiting client connection..."
connection,address = sock.accept()#接收客戶連接請(qǐng)求
print "a client have connected..."
while True:
try:
connection.settimeout(5) #設(shè)置超時(shí)時(shí)間
buf = connection.recv(1024) #接收數(shù)據(jù)
if buf == "1":
connection.send("you have send me 1!welcome to server!")
elif buf=="2":
connection.send("you have send me 2!I have recv!")
elif buf=="3":
connection.send("close the connection!")
break
else:
connection.send("unknow command!")
except socket.timeout:
print "time out"
connection.close()
print "a client exit..."
客戶器端代碼:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 8001))
import time
time.sleep(2)
while True:
data=raw_input("input command:");
sock.send(data)
print sock.recv(1024)
if data=="3":
break
sock.close()
1.首先開兩個(gè)IDLE,分別打開服務(wù)器端和客戶器端代碼。
2.F5運(yùn)行服務(wù)器端代碼,會(huì)出現(xiàn)waiting client connection...
3.F5運(yùn)行客戶端代碼,會(huì)出現(xiàn)input command: ;
4.這時(shí)服務(wù)器和客戶端就連接上了,可以正常的通信啦,如圖:

5.再次運(yùn)行服務(wù)器端代碼時(shí)會(huì)出現(xiàn)錯(cuò)誤,這時(shí)可以通過(guò)任務(wù)管理器,將其中的pythonw.exe進(jìn)程結(jié)束,重新打開,編譯就可以啦!
客戶端:
import socket s=socket.socket() host = socket.gethostname() port = 1234 s.connect((host, port)) print s.recv(1024)
服務(wù)端:
import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
s.listen(5)
while True:
c, addr = s.accept()
print 'Got connection from', addr
c.send('Thank you for connecting')
c.close()
http編程
from urllib import urlopen
webpage = urlopen('http://www.python.org')
加上正規(guī)表達(dá)式
import re
text = webpage.read()
m = re.search('<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE)
m.group(1)
urllib
urllib2
一個(gè)基于SocketServer的小型服務(wù)器例子:
from SocketServer import TCPServer, StreamRequestHandler
>>> class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from', addr
self.wfile.write('Thank you for connecting')
>>> server = TCPServer(('',1234), Handler)
>>> server.serve_forever()
使用SocketServer進(jìn)行分叉和線程處理
分叉Server:
from SocketServer import TCPServer,ForkingMinIn, StreamRequestHandler
class Server(ForkingMinIn, TCPServer):pass
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from',addr
self.wfile.write('Thank you for connection')
server = Server(('',1234),Handler)
server.serve_forever()
線程Server:
from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
class Server(ThreadingMixIn, TCPServer):pass
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from',addr
self.wfile.write('Thank you for connecting')
server = Server(('',1234),Handler)
server.serve_forever()
帶有select和pool的異步I/O
select服務(wù):
import socket, select s = socket.socket() host = socket.gethostname() prot = 1234 s.bind((host,port)) s.listen(5) inputs = [s] while True: rs,ws,es = select.select(inputs,[],[]) for r in rs: if r is s: c, addr = s.accept() print 'Got connection from',addr inputs.append(c) 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
pool服務(wù)器:
import socket, select
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
fdmap = {s.fileno():s}
s.listen(5)
p = select.poll()
p.register(s)
while True:
events = p.poll()
for fd, event in events:
if fd in fdmap:
c, addr = s.accept()
print 'Got connection from', addr
p.register(c)
fdmap[c.fileno()]=c
elif event & select.POLLIN:
data = fdmap[fd].recv(1024)
if not data:
print fdmap[fd].getpeername(),'disconnected'
p.unregister(fd)
del fdmap[fd]
else:
print data
Twisted網(wǎng)絡(luò)框架
相關(guān)文章
python?playwright?庫(kù)上傳和下載操作(自動(dòng)化測(cè)試?playwright)
這篇文章主要介紹了python?playwright?庫(kù)上傳和下載操作(自動(dòng)化測(cè)試?playwright?),playwright中的上傳和下載比selenium的上傳和下載要簡(jiǎn)便些,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Python自制一個(gè)PDF轉(zhuǎn)PNG圖片小工具
這篇文章主要為大家詳細(xì)介紹了如何利用Python中的PyQt5自制一個(gè)PDF轉(zhuǎn)PNG格式圖片的小工具,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-02-02
Python3使用PyQt5制作簡(jiǎn)單的畫板/手寫板實(shí)例
下面小編就為大家?guī)?lái)一篇Python3使用PyQt5制作簡(jiǎn)單的畫板/手寫板實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
利用Python實(shí)現(xiàn)多種風(fēng)格的照片處理
這篇文章主要為大家詳細(xì)介紹了如何利用Python一鍵實(shí)現(xiàn)多種風(fēng)格的照片處理并制作可視化GUI界面,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-07-07
pampy超強(qiáng)的模式匹配工具的實(shí)現(xiàn)
在自然語(yǔ)言處理界,模式匹配可以說(shuō)是最常用的技術(shù)。甚至可以說(shuō),將NLP技術(shù)作為真實(shí)生產(chǎn)力的項(xiàng)目都少不了模式匹配。本文就介紹了pampy超強(qiáng)的模式匹配工具的實(shí)現(xiàn),感興趣的可以了解一下2021-07-07
Python logging模塊寫入中文出現(xiàn)亂碼
這篇文章主要介紹了Python logging模塊寫入中文出現(xiàn)亂碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05

