Python socket编程(阻塞) --基于SocketServer

来源:互联网 发布:天涯明月刀有mac版吗 编辑:程序博客网 时间:2024/05/21 05:37

SocketServer模块是Pythonsocket常规通信的一个经过封装的模块,使用简单,基于面向对象的设计模式,但功能有限,可用于快速开发。


Tips:


默认端口:6767

默认本地ip:127.0.0.1


代码样例:


1. 服务端:


#!/usr/bin/env python# encoding: utf-8from SocketServer import (TCPServer as TCP,StreamRequestHandler as SRH)import sysimport osfrom time import ctimereload(sys)sys.setdefaultencoding("utf-8")conn_flag = False #连接提示标识,规定只显示一次class myWebServer(SRH):def handle(self):global conn_flagif conn_flag == False:print "[*]Connect from: ",self.client_addressconn_flag = Truebuf = self.rfile.readline()self.wfile.write("[%s] %s" % (ctime(),buf))print "[%s] %s" % (ctime(),buf)def main():HOST = "127.0.0.1"PORT = 6767Server = TCP((HOST,PORT), myWebServer)print "Waiting for the Connection..."try:Server.serve_forever()except KeyboardInterrupt:sys.exit(0)except Exception as e:print "[-]Client may be offLine"sys.exit(-1)if __name__ == '__main__':main()


2. 客户端


#!/usr/bin/env python# encoding: utf-8import socketimport osimport sysimport timeimport tracebackreload(sys)sys.setdefaultencoding("utf-8")def SocketInit():try:s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)except Exception as e:sys.exit(-1)return sdef Conn(s,host,port):while 1:try:s.connect((host,port))except Exception as e:time.sleep(2)else:breakdef main():host = "127.0.0.1"port = 6767try:while 1:sC = SocketInit()Conn(sC, host, port)Str_buffer = raw_input(host+":"+str(port)+">")Str_buffer += "\r\n"try:sC.send(Str_buffer)except Exception as e:print "[-]Can not send Data"else:recv_buffer = sC.recv(1024)if not recv_buffer:print "[-]Server is Off"else:print recv_bufferexcept KeyboardInterrupt:sC.close()sys.exit(0)if __name__ == '__main__':main()