Python socket ssl 的server端和client端程序

来源:互联网 发布:常见算法的时间复杂度 编辑:程序博客网 时间:2024/05/16 15:23

首先用生成证书和key:

openssl req -new -x509 -days 365 -nodes -out certSrv.pem -keyout keySrv.pem

/////////////////////////////////////////////////////////////////////////////////////////////

SERVER SIDE code   socketS.py :


import socket, ssl, time


#context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile = "certSrv.pem", keyfile = "keySrv.pem")
bindsocket = socket.socket()
print( "socket create success! ")
bindsocket.bind(('', 10032))
print( "socket bind success! ")
bindsocket.listen(5)
print( "socket listen success! ")


def do_something(connstream, data):
        print( "data length: ", len(data))
        return True


def deal_with_client(connstream):
        t_recv = 0
        t_send = 0
        n = 0
        t1 = time.clock()
        data = connstream.recv(1024)
        t2 = time.clock()
        t = t2 - t1
        print("receive time: ", t)
        while data:
                if not do_something(connstream, data):
                        break

                n = n + 1
                t1 = time.clock()
                connstream.send(b'b'*1024)
                t2 = time.clock()
                t_send += t2-t1
                print( "send time: ", t2-t1)
                t1 = time.clock()
                data = connstream.recv(1024)
                t2 = time.clock()
                t_recv += t2-t1
                print( "receive time: ", t2-t1)
        print( "avg send time: ", t_send/n, "avg receive time: ", t_recv/n)


while True:
        newsocket, fromaddr = bindsocket.accept()
        print ( "socket accept one client!")
        connstream = context.wrap_socket( newsocket, server_side = True)
        try:
                deal_with_client(connstream)
        finally:
                connstream.shutdown(socket.SHUT_RDWR)
                connstream.close()



//////////////////////////////////////////////////////////////////////////////////////////////

CLIENT SIDE code     socketC.py :


import socket, ssl, pprint, time


s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print( "socket create success! ")


ssl_sock = ssl.wrap_socket(s, ca_certs="certSrv.pem", cert_reqs=ssl.CERT_REQUIRED)
ssl_sock.connect(('', 10032))
print("socket connets success! ")


pprint.pprint(ssl_sock.getpeercert())
n = 0
t_send = 0
t_recv = 0
while n<10:
        n = n+1
        t1 = time.clock()
        ssl_sock.send(b'a'*100)
        t2 = time.clock()
        t_send += t2-t1
        print( "send time: ", t2-t1)
        t1 = time.clock()
        data = ssl_sock.recv(1024)
        t2 = time.clock()
        t_recv += t2-t1
        print( "receive time: ", t2-t1)
print( "avg send time: ", t_send/n, "avg receive time: ", t_recv/n)


ssl_sock.close()


//////////////////////////////////////////////////////////////////////////////////////////////
RESULT(client):

wsm@ubuntu:~/bin$ python socketC.py 
socket create success! 
socket connets success! 
{'issuer': ((('countryName', u'AU'),),
            (('stateOrProvinceName', u'Some-State'),),
            (('organizationName', u'Internet Widgits Pty Ltd'),)),
 'notAfter': 'Nov 10 04:03:59 2016 GMT',
 'notBefore': u'Nov 11 04:03:59 2015 GMT',
 'serialNumber': u'F7B84366312864F7',
 'subject': ((('countryName', u'AU'),),
             (('stateOrProvinceName', u'Some-State'),),
             (('organizationName', u'Internet Widgits Pty Ltd'),)),
 'version': 1L}
('send time: ', 4.999999999999796e-05)
('receive time: ', 7.299999999999668e-05)
('send time: ', 3.299999999999831e-05)
('receive time: ', 3.199999999999731e-05)
('send time: ', 2.5999999999998247e-05)
('receive time: ', 5.000000000000143e-05)
('send time: ', 3.399999999999931e-05)
('receive time: ', 3.799999999999637e-05)
('send time: ', 2.1000000000000185e-05)
('receive time: ', 2.3000000000002185e-05)
('send time: ', 1.7000000000003124e-05)
('receive time: ', 2.4000000000003185e-05)
('send time: ', 1.8999999999998185e-05)
('receive time: ', 2.9000000000001247e-05)
('send time: ', 2.0999999999993246e-05)
('receive time: ', 2.3000000000002185e-05)
('send time: ', 1.7000000000003124e-05)
('receive time: ', 2.3000000000002185e-05)

('send time: ', 1.7000000000003124e-05)

('receive time: ', 2.1000000000000185e-05)
('avg send time: ', 2.549999999999948e-05, 'avg receive time: ', 3.3600000000000295e-05)                

//////////////////////////////////////////////////////////////////////////////////////////////
RESULT(server):     

wsm@ubuntu:~/bin$ python ./socketS.py 
socket create success! 
socket bind success! 
socket listen success! 
socket accept one client!
('receive time: ', 6.0999999999998555e-05)
('data length: ', 100)
('send time: ', 6.599999999999662e-05)
('receive time: ', 2.7000000000006186e-05)
('data length: ', 100)
('send time: ', 2.5999999999998247e-05)
('receive time: ', 3.200000000000425e-05)
('data length: ', 100)
('send time: ', 4.300000000000137e-05)
('receive time: ', 2.8000000000000247e-05)
('data length: ', 100)
('send time: ', 3.399999999999931e-05)
('receive time: ', 1.5000000000001124e-05)
('data length: ', 100)
('send time: ', 2.0000000000006124e-05)
('receive time: ', 1.2999999999999123e-05)
('data length: ', 100)
('send time: ', 2.2000000000001185e-05)
('receive time: ', 1.2999999999999123e-05)
('data length: ', 100)
('send time: ', 3.899999999999737e-05)
('receive time: ', 1.5000000000001124e-05)
('data length: ', 100)
('send time: ', 1.8999999999998185e-05)
('receive time: ', 1.2999999999999123e-05)

('data length: ', 100)
('send time: ', 2.3999999999996247e-05)
('receive time: ', 1.3000000000006062e-05)
('data length: ', 100)
('send time: ', 1.7999999999997185e-05)
('receive time: ', 0.00017400000000000054)
('avg send time: ', 3.1099999999999184e-05, 'avg receive time: ', 3.430000000000169e-05)

                                                               

       50,1-8        Bot


0 0
原创粉丝点击