服务器端代码:
# -*- coding: cp936 -*-
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#初始化socket
sock.bind((\"127.0.0.1\", 8001))#绑定本机地址,8001端口
sock.listen(5)#等待客户连接
while True:
print \"waiting client connection...\"
connection,address = sock.accept()#接收客户连接请求
print \"a client have connected...\"
while True:
try:
connection.settimeout(5) #设置超时时间
buf = connection.recv(1024) #接收数据
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.首先开两个IDLE,分别打开服务器端和客户器端代码。
2.F5运行服务器端代码,会出现waiting client connection…
3.F5运行客户端代码,会出现input command: ;
4.这时服务器和客户端就连接上了,可以正常的通信啦,如图:

5.再次运行服务器端代码时会出现错误,这时可以通过任务管理器,将其中的pythonw.exe进程结束,重新打开,编译就可以啦!
客户端:
import socket s=socket.socket() host = socket.gethostname() port = 1234 s.connect((host, port)) print s.recv(1024)
服务端:
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\')
加上正规表达式
import re text = webpage.read() m = re.search(\'about\', text, re.IGNORECASE) m.group(1)
urllib
urllib2
一个基于SocketServer的小型服务器例子:
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进行分叉和线程处理
分叉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服务:
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服务器:
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网络框架
http://www.jb51.net/article/64199.htm