2016-08-07 32 views
0

我已经使用python socket模块编写了以下TCP客户端和服务器。但是,我运行它们后,没有输出。看来, 程序不能出来while循环在recv_all方法 服务器: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方法是否应该中断? –

相关问题