服务器端代码:
# -*- 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)
urlliburllib2一个基于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/oselect服务:
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
更多python 网络编程常用代码相关文章请关注php中文网!