python echo服务器和客户端(客户端可以用telnet之类的)

发上来记录一下,省得下次再写一遍

服务器:server.py

#-*- coding:utf-8 -*-  

from SocketServer import TCPServer, BaseRequestHandler  
import traceback  
import struct
import logging



# 连接处理类
class MyBaseRequestHandler(BaseRequestHandler):  
    """ 
    #从BaseRequestHandler继承,并重写handle方法 
    """  
    def handle(self):  
        #循环监听(读取)来自客户端的数据  
        try:
            while True:  
                data = self.request.recv(4)
                if data == '':
                    break
                logging.info("recv data, echo")
                self.request.sendall(data)

        except:
            traceback.print_exc()

        logging.info("close connect")
        self.request.close()


if __name__ == "__main__":  
    #初始化日志
    logging.basicConfig(level=logging.DEBUG,
            format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
            datefmt='%a, %d %b %Y %H:%M:%S',
            #filename='myapp.log',
            #filemode='w'
            )

    logging.info("\n\n\n=========== Server start =========")

    host = ""       #主机名,可以是ip,像localhost的主机名,或""  
    port = 5555          #端口  
    addr = (host, port)  

    #购置TCPServer对象,  
    server = TCPServer(addr, MyBaseRequestHandler)  

    #启动服务监听  
    server.serve_forever()

 

客户端:client.py

#-*- coding:utf-8 -*-  
from socket import * 
import sys
import time
import string

HOST = sys.argv[1] 
SPAN = 0;
if len(sys.argv) == 3:
    SPAN = string.atof(sys.argv[2])
PORT = 5555 
ADDR = (HOST, PORT) 
tcpCliSock = socket(AF_INET, SOCK_STREAM) 
tcpCliSock.connect(ADDR) 
data = "aaaa"
maxD = 0
while True:
    t1 = time.time()
    tcpCliSock.send(data) 
    t = tcpCliSock.recv(4) 
    t2 = time.time()
    td = t2 - t1;
    if td > maxD:
        maxD = td
    print ("recv data , timediff=" + str(td) + ", max=" + str(maxD))
    print("sleep " + str(SPAN))
    time.sleep(SPAN)

 

posted @ 2013-07-04 15:18  绿色冰点  Views(1365)  Comments(0Edit  收藏  举报