2013-06-21 59 views
0

我真的很陌生的網絡一般,我試圖建立一個簡單的交換之間的python服務器和客戶端。演示python服務器客戶端交互

這是服務器

import socket, ssl 

def do_something(connstream, data): 
print "HALLO" 

def deal_with_client(connstream): 
    data = connstream.read() 
    # null data means the client is finished with us 
    while data: 
     if not do_something(connstream, data): 
      # we'll assume do_something returns False 
      # when we're finished with client 
      break 
     data = connstream.read() 
    # finished with client 

bindsocket = socket.socket() 
bindsocket.bind(('127.0.0.1', 10024)) 
bindsocket.listen(5) 


while True: 
    newsocket, fromaddr = bindsocket.accept() 
    print "Setting up connection" 
    connstream = ssl.wrap_socket(newsocket, 
          server_side=True, 
          ca_certs=None, 
          certfile="cert.pem", 
          keyfile="privatekey.pem", 
          ssl_version=ssl.PROTOCOL_TLSv1) 
    try: 
     deal_with_client(connstream) 
    finally: 
     connstream.shutdown(socket.SHUT_RDWR) 
     connstream.close() 

這裏代碼爲client.py

import socket, ssl 

clientsocket = socket.socket() 
ssl_sock = ssl.wrap_socket(clientsocket, 
         certfile="cert.pem", 
         cert_reqs=ssl.CERT_REQUIRED) 
ssl_sock.connect(('127.0.0.1', 10024)) 

print ssl_sock.getpeername() 
print ssl_sock.getpeercert() 

data = ssl_sock.recv(1024) 
ssl_sock.close() 

print 'Received', repr(data) 

我所產生的 「cert.pem」 和 「privatekey.pem」 使用的代碼OpenSSL的。

Traceback (most recent call last): 
File "server.py", line 30, in <module> 
    ssl_version=ssl.PROTOCOL_TLSv1) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 344, in wrap_socket 
    ciphers=ciphers) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 121, in __init__ 
    self.do_handshake() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ssl.py", line 283, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [Errno 8] _ssl.c:499: EOF occurred in violation of protocol 

我想知道是否有人知道更多可以指出我在正確的方向。我真的想用SSL btw做這個,但如果這是更好的方法,我會願意切換到TLS。

+1

這裏有1000000個這樣的例子在谷歌上。 –

回答

0

可能是因爲套接字沒有運行兼容的ssl版本,您應該在客戶端中放置一個「ssl.PROTOCOL_TLSv1」兼容版本(或者從服務器中刪除它並使用默認值)。 使用谷歌搜索你可以找到很多套接字通信的例子