0
点赞
收藏
分享

微信扫一扫

python 14章,网络编程


一,socket 模块

套接字包括两类:服务器,客户机,

创建一个套接字后让它等待连接

服务器:

import socket
s = socket.socket()
port = 1234
host = socket.gethostname()
print host
s.bind((host,port))
s.listen(5)
while True:
get,addr = s.accept()
print 'Got connection from',addr
get.send('Thank you for connecting')
get.close()


客户机:

import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host,port))
print s.recv(1024)


>>> 

Z5WRYRLDY59AL03

Got connection from ('222.27.174.175', 53389)

Got connection from ('222.27.174.175', 53398)

Got connection from ('222.27.174.175', 53405)

Got connection from ('222.27.174.175', 53407)

>>> ================================ RESTART ================================
>>>
Thank you for connecting
>>> ================================ RESTART ================================
>>>
Thank you for connecting
>>> ================================ RESTART ================================
>>>
Thank you for connecting
>>> ================================ RESTART ================================
>>>
Thank you for connecting

二,urllib,urllib2

  可以通过 网络访问文件,借用URL简单下载用urllib 如果要用http验证或用cookie 用urllib2

1.打开远程文件

from urllib import urlopen

webpage = urlopen("http://www.baidu.com")

urlopen 方法:close,read,readline,readlines

2.获取远程文件

urlretrieve('http://www.python.org','c:\\python.html')

默认放在临时位置,用urlcleanup清理

三,SocketServer

SocketServer是许多服务器框架的基础如:BaseHTTPServer,SimpleHTTPServer,CGIHTTPServer

SocketSever包含4个基本类:1针对TCP套接字流的TCPServer,2.针对UDP数据报UDPServer 3.UnixStreamServer 4.UnixDatagramServer

服务器:


from SocketServer import TCPServer,StreamRequestHandler
import socket
class Handler(StreamRequestHandler):

def handle(self):
addr = self.request.getpeername()
print 'Got connection from',addr
self.wfile.write('Thank you for connecting!!!')
host = socket.gethostname()
server = TCPServer((host,1234),Handler)
server.serve_forever()

>>> 


Thank you for connecting!!!


>>>

Got connection from ('222.27.174.175', 55479) 

四,多连接

3种方法: 分叉(forking),线程(threading),异步IO(asynchronous I/O)

使用SocketServer进行分叉和线程处理

from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler
import socket
class Server(ForkingMixIn,TCPServer):pass

class Handler(StreamRequestHandler):

def handle(self):
addr = self.request.getpeername()
print 'Got connection from',addr
self.wfile.write('Thank you for connecting ...')
host = socket.gethostname()
server = Server(('',1234),Handler)
server.serve_forever()


使用select

import socket,select
s = socket.socket()
host = socket.gethostname()
port = 3306
print host
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 form',addr
inputs.append(c)
else:
try:
data = r.recv(1024)
disconnected = not data
if data:
r.send('yes!I can hear you!')
except socket.error:
disconnected = True

if disconnected:
print r.getpeername(),'disconnected'
inputs.remove(r)
else:
print data





举报

相关推荐

0 条评论