gpt4 book ai didi

python-3.x - 以下Python套接字级编程代码在什么时候卡住了?

转载 作者:行者123 更新时间:2023-12-03 11:59:10 29 4
gpt4 key购买 nike

这是运行基本服务器的server.py文件:

import socket
import sys

sockett = socket.socket()
sockett.bind(('127.0.0.1', 123))
sockett.listen(10)
while True:
print('1', end='')
while True:
print('2', end='')
try:
client, addr = sockett.accept()
print(client,addr)
break
except Exception as e:
print(e)
print(client.recv(400))
print(client.recv(1024))
print('3')
print('4')

这是我正在运行的client.py代码:
import socket
import sys

sockett = socket.socket()
sockett.connect(('127.0.0.1', 123))
sockett.send(b'0')
print("Hello")

我有一个疑问是,当我运行server.py(让S)文件然后运行client.py(让C)文件时,S继续运行,但C停止运行,这应该是事实,但S所在的位置卡住是主要问题。它第一次打印3,然后不打印任何内容,而不是4(因此不会超出循环)而不是1(因此仍然不会循环)。原因可能是什么?打印3后的代码在哪里?
这是我得到的输出:
12<socket......>(...)
b'0'
b''
3
_ (keeps on running indefinitely)

据我说,它应该先打印1,然后再打印2,然后遇到一个错误,该错误将由try-except处理,然后打印:
b''
b''
3

然后继续像这样循环播放。

最佳答案

服务器实际上正在循环,但是运行此脚本时看不到1或2的原因是因为您没有刷新输出:

import socket
import sys

sockett = socket.socket()
sockett.bind(('127.0.0.1', 123))
sockett.listen(10)
while True:
print('1', end='')
while True:
print('2', end='', flush=True)
try:
client, addr = sockett.accept()
print(client,addr)
break
except Exception as e:
print(e)
print(client.recv(400))
print(client.recv(1024))
print('3')
print('4')

您会注意到,使用 flush=True,在 print('2', end='', flush=True)中,您会看到 12出现在客户端连接之前,并且在客户端断开连接后再次出现。

12<socket...> (...)
b'0'
b''
3
12_ (keeps on running indefinitely)


有了这个,您可以看到它再次在 client, addr = sockett.accept()上等待

关于python-3.x - 以下Python套接字级编程代码在什么时候卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455378/

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