python 提供了对底层网络编程的socket模块,也提供了诸如urllib、httplib、poplib、ftplib等针对特定功能的编程模块。
以下直接贴代码测试socket模式使用:
服务端:Server.py
#-*- coding:gbk -*-
'''
Created on 2013-4-30
@author: herong
'''
import threading
from socket import *
import time
class process(threading.Thread):
'''处理类'''
__client = None
__addr = None
def __init__(self,client,addr):
threading.Thread.__init__(self)
self.__client = client
self.__addr = addr
print "客户端%s连接成功!"%(self.__addr[0])
def run(self ):
try:
while True:
recvData = self.__client.recv(gBufferSize)
self.__client.send("客户端%s请求[%s]处理.......\n"%(self.__addr[0],recvData))
print '处理中......'
time.sleep(1)
print '处理完毕.'
self.__client.send("客户端%s请求[%s]处理完毕!\n"%(self.__addr[0],recvData))
self.__client.send("[end]\n")
if recvData == "exit":
self.__client.send("服务器退出!\n")
break
finally:
self.__client.close()
class Server(threading.Thread):
'''服务端类'''
__port = None
__socket = None
__active = True
def __init__(self,port=8001,backlog=10):
threading.Thread.__init__(self)
self.__port = port
self.__socket = socket(AF_INET,SOCK_STREAM)
self.__socket.bind(("",self.__port))
self.__socket.listen(backlog)
print "服务开启,开始接收客户端请求..."
def run(self):
try:
while self.__active:
client ,addr = self.__socket.accept()
print "client:%s,addr:%s"%(client,addr)
p = process(client ,addr)
p.setDaemon(True)
p.start()
finally:
self.__socket.close()
gBufferSize = 1024
if __name__ == '__main__':
Server(8001,5).start()
客户端:Client.py
#-*- coding:gbk -*-
'''
Created on 2013-4-30
@author: herong
'''
import threading
import sys
from socket import *
class Client(threading.Thread):
'''客户端类'''
__port = None
__socket = None
__host = None
__active = True
def __init__(self,host,port=8001):
threading.Thread.__init__(self)
self.__port = port
self.__host = host
self.__socket = socket(AF_INET,SOCK_STREAM)
self.__socket.connect((self.__host,self.__port))
print "成功连接服务端%s,端口:%s"%(self.__host,self.__port)
def run(self):
try:
while self.__active:
cmd = raw_input("请输入请求服务端指令:")
self.__socket.send(cmd)
while 1:
recvData = self.__socket.recv(gBufferSize)
print "服务端返回信息:%s"%(recvData)
if cmd == "exit":
sys.exit(0)
if '[end]' in recvData:
break
finally:
self.__socket.close()
gBufferSize = 1024
if __name__ == '__main__':
Client("127.0.0.1",8001).start()
客户端输出:
成功连接服务端127.0.0.1,端口:8001
请输入请求服务端指令:cmd
服务端返回信息:客户端127.0.0.1请求[cmd]处理.......
服务端返回信息:客户端127.0.0.1请求[cmd]处理完毕!
服务端返回信息:[end]
请输入请求服务端指令:
服务端输出:
服务开启,开始接收客户端请求...
client:<socket._socketobject object at 0x0000000002567AD8>,addr:('127.0.0.1', 26097)
客户端127.0.0.1连接成功!
处理中......
处理完毕.