gpt4 book ai didi

python - 为什么python输入函数返回空字符串而不是等待用户输入?

转载 作者:太空宇宙 更新时间:2023-11-03 15:11:00 25 4
gpt4 key购买 nike

下面的代码是一个简单的聊天客户端。我使用 netcat -l 8000 启动本地 TCP 服务器,然后通过运行下面的脚本与其连接。取决于我先启动 t1还是t2。我可以从服务器读取也可以不读取。我还注意到,通过 print 语句,我似乎在使用 sys.readline 和输入函数从终端读取时收到空消息。

我也尝试过使用线程而不是进程,结果是相同的。

编辑:根据 @paulsm4 给出的响应,我使用 ncat 而不是 netcat 作为我的服务器。这导致了更疯狂的事情发生。如果我使用 ncat -k -l -m 100 8000 并将 Process 替换为 Thread,而不是 netcat/nc。该代码按其应有的方式工作。但是当我使用 Process 时,代码崩溃了。

import sys
import socket
from multiprocessing import Process
from time import sleep


def connect(host, port):
s = socket.socket()
s.connect((host, port))
return s

def send_message(host, port):
s = connect(host, port)
while True:
sleep(1)
message = None
try:
message = input('> ')
except EOFError:
print("try failed")
pass
print('message is ', message)
if message:
val = s.send(message.encode('utf8'))
print('message sent')


def receive(host, port):
s = connect(host, port)
while True:
sleep(1)
message = s.recv(1024).decode('utf8')
print('\n', message)


def main(host, port):
t1 = Process(target=send_message, args=(host, port))
t2 = Process(target=receive, args=(host, port))
t1.start()
t2.start()
t1.join()
t2.join()


if __name__ == '__main__':
host, port = sys.argv[1], int(sys.argv[2])
main(host, port)

最佳答案

https://docs.python.org/2/howto/sockets.html

When a recv returns 0 bytes, it means the other side has closed (or is in the process of closing) the connection. You will not receive any more data on this connection. Ever. You may be able to send data successfully; I’ll talk more about this later.

换句话说,您需要确保您的“服务器”已启动,并准备好在客户端尝试与其通信之前(以及同时)接受连接。

上面的链接有一个很棒的示例程序。这是另一个:

Python socket – network programming tutorial

关于python - 为什么python输入函数返回空字符串而不是等待用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com