【问题标题】:TCP client server not receiving any data from each otherTCP客户端服务器不接收来自对方的任何数据
【发布时间】:2016-08-07 18:56:40
【问题描述】:

我使用 python 套接字模块编写了以下 TCP 客户端和服务器。但是,在我运行它们之后,没有给出任何输出。看起来 程序无法退出 recv_all 方法中的 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()

客户:

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

【问题讨论】:

    标签: python sockets tcp python-sockets


    【解决方案1】:

    因为在服务器文件中您在另一个文件中使用了无限循环。我建议你在这两个文件中编辑recv_all 方法:

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

    但是在像这样编辑之后,您的服务器会一直运行到KeyInterrupt,而您应该在每次要发送数据时运行客户端文件。如果你想在服务器和客户端之间自动使用send/receive,我建议你试试threading

    【讨论】:

    • 服务器的 recvall 方法在停止接收数据时不应该中断吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多