2016-08-07 15 views
0

私は以下のTCPクライアントとサーバーをpythonソケットモジュールを使って書いています。しかし、私はそれらを実行した後、出力は与えられていません。 プログラムがrecv_all方法 サーバーにwhileループから出てくることができないようです:TCPクライアントサーバーが互いにデータを受信して​​いません

import socket 


def recv_all(sock): 
    data = [] 
    while True: 
     dat = sock.recv(18) 
     if not dat: 
      break 
     data.append(dat) 

    return "".join(data) 


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
HOST = '127.0.0.1' 
PORT = 45678 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
sock.bind((HOST, PORT)) 
sock.listen(1) 
print "listening at", sock.getsockname() 
while True: 
    s, addr = sock.accept() 
    print "receiving from", addr 
    final = recv_all(s) 
    print "the client sent", final 
    s.sendall("hello client") 
    s.close() 

クライアント:

import socket 


def recv_all(sock): 
    data=[] 
    while True: 
     dat=sock.recv(18) 
     if not dat: 
      break 
     data.append(dat) 
    return "".join(data) 

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
PORT=45678 
HOST='127.0.0.1' 
sock.connect((HOST,PORT)) 
sock.sendall("hi server") 

final=recv_all(sock) 

print "the server sent",final 

答えて

0

サーバファイルに別で無限ループを使用しているため。私はあなたが両方のファイルでrecv_all方法この方法で編集することをお勧め:

def recv_all(sock): 
data = [] 
dat = sock.recv(18) 
data.append(dat) 
return "".join(data) 

をしかし、あなたは毎回あなたがデータを送信したいクライアント・ファイルを実行する必要がありながら、このように編集した後、あなたのサーバは、KeyInterruptまでオンのまま。サーバーとクライアントの間に自動的にsend/receiveが必要な場合は、threadingを試してください。

+0

データの受信を停止したときにサーバーrecvallメソッドが破損してはいけませんか? –

関連する問題