简体   繁体   English

TCP客户端服务器未从彼此接收任何数据

[英]TCP client server not receiving any data from each other

I have written the following TCP client and server using python socket module. 我已经使用python套接字模块编写了以下TCP客户端和服务器。 However, after I run them, no output is being given. 但是,运行它们后,没有输出。 It seems that the program is not able to come out of the while loop in the recv_all method Server: 似乎该程序无法从recv_all方法Server中的while循环中退出:

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()

Client : 客户:

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

Because in server file you use an endless loop in another. 因为在服务器文件中您使用了另一个循环。 I suggest you to edit recv_all method in both files this way: 我建议您以这种方式在两个文件中编辑recv_all方法:

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

But after edit like this your server stays on until KeyInterrupt , while you should run client file everytime you want to send data. 但是,经过这样的编辑后,服务器将一直保持打开状态,直到KeyInterrupt为止,而您每次要发送数据时都应运行客户端文件。 If you want an automatically send/receive between server and client, I offer you try threading . 如果您想在服务器和客户端之间自动send/receive ,我建议您尝试使用threading

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM