免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5681 | 回复: 0
打印 上一主题 下一主题

[转]python socket编程(socketserver) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-21 19:50 |只看该作者 |倒序浏览

用Python实现socket是一件十分的简单,比PHP容易简单多了。下面我们利用SocketServer
模块来实现网络客户端与服务器并发连接非阻塞socket。
首先,先了解下SocketServer模块中可供使用的类:
BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。
TCPServer/UDPServer:基本的网络同步TCP/UDP服务器。
UnixStreamServer/ UnixDatagramServer:基本的基于文件同步TCP/UDP服务器。
ForkingMixIn/ ThreadingMixIn:实现了核心的进程化或线程化的功能;作为混合类,与服务器类一并使用以提供一些异步特性;这个类不会直接实例化。
ForkingTCPServer/ ForkingUDPServer:ForkingMixIn和TCPServer/UDPServer的组合。
BaseRequestHandler:包含处理服务请求的核心功能。这个类只用于派生,所以不会生成这个类的实例可以考虑使用StreamRequestHandler或DatagramRequestHandler。
StreamRequestHandler/ DatagramRequestHandler:用于TCP/UDP服务器的服务处理工具。
下面我们正式进入主题,这里我们采用StreamRequestHandler和ThreadingTCPServer来实现客户端与服务器并发连接非阻塞socket。
ThreadingTCPServer派生自ThreadingMixIn,主要实现核心的进程化合线程化功能。
StreamRequestHandler主要用于用于TCP/UDP服务器的服务处理工具。
一、创建SocketServerTCP服务器:
import SocketServer
  • from SocketServer import StreamRequestHandler as SRH
  • from time import ctime

  • host = ''
  • port = 3130
  • addr = (host,port)

  • class Servers(SRH):
  • def handle(self):
  • print 'got connection from ',self.client_address
  • self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime()))
  • while True:
  • data = self.request.recv(1024)
  • if not data: break
  • print data
  • self.request.send(data)

  • print 'server is running....'
  • server = SocketServer.ThreadingTCPServer(addr,Servers)
  • server.serve_forever()
    二、创建SocketServerTCP客户端
    from socket import *

  • host = 'localhost'
  • port = 3130
  • bufsize = 1024
  • addr = (host,port)
  • client = socket(AF_INET,SOCK_STREAM)
  • client.connect(addr)

  • while True:
  • data = raw_input()
  • if not data or data=='exit':
  • break
  • client.send('%s\r\n' % data)
  • data = client.recv(bufsize)
  • if not data:
  • break
  • print data.strip()

  • client.close()
    三、执行服务器和客户端
    服务器端:
    D:\pycode\socket>s2.py
    server is running….
    got connection from (’127.0.0.1′, 2141)
    客户端:
    D:\pycode\socket>c2.py
    hello
    connection :3130 at Mon Apr 20 02:44:17 2009 succeed!
    who are u?
    hello
    参考:
    http://book.csdn.net/bookfiles/741/10074122783.shtml


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/60332/showart_2127359.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP