python - TCP 多线程 Python
问题描述
我是 Python 和 Thread 的新手,我正在尝试在 python 中创建一个 TCP 服务器。客户端与服务器连接良好,但只能输入 1 个命令,然后崩溃,代码如下:
serverSocket = socket(AF_INET, SOCK_STREAM)
def Main():
serverPort = 7722
print("The server is ready to receive on port", serverPort)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
def start_socket(connectionSocket):
while True:
print('Connection requested from', clientAddress)
client_code_number = connectionSocket.recv(2048)
server_code_number = client_code_number.decode()
if (server_code_number == "1"):
print("Command 1\n\n")
message = connectionSocket.recv(2048)
modifiedMessage = message.decode().upper()
connectionSocket.send(modifiedMessage.encode())
connectionSocket.close()
if __name__ == '__main__':
Main()
while True:
(connectionSocket, clientAddress) = serverSocket.accept()
os.system('cls')
print('connexion from: ' + str(clientAddress))
_thread.start_new_thread(start_socket, (connectionSocket,))
serverSocket.close()
这是客户:
def start_socket():
init_text()
choice_number = input('Input option: ')
#GET THE USER NUMBER
clientSocket.send(choice_number.encode())
while True:
if choice_number == "1":
sentence_caps = input('Input sentence: ')
clientSocket.send(sentence_caps.encode())
modifiedMessage = clientSocket.recv(2048)
print('\nReply from server:', modifiedMessage.decode())
start_socket()
else:
start_socket()
这是我的错误:
File "BasicTCPServer.py", line 33, in start_socket
client_code_number = connectionSocket.recv(2048)
OSError: [Errno 9] Bad file descriptor
解决方案
根本原因是套接字正在关闭。
def start_socket(connectionSocket):
while True:
print('Connection requested from', clientAddress) # <-- where does client address come from
client_code_number = connectionSocket.recv(2048) # <-- this works the first time round
server_code_number = client_code_number.decode()
if (server_code_number == "1"):
...
connectionSocket.close() # <-- this closes the socket
您的代码第二次通过循环抱怨。connectionSocket 已关闭,因此它是一个错误的文件描述符。
推荐阅读
- typescript - 如何用一种具体类型和一种推断类型定义泛型函数
- excel - 如何修复将数据从一个工作簿复制到另一个工作簿的宏
- java - VSCode 无法导入外部库
- android - 如何解决在 Android 上通过 Firefox 打开 PDF 的问题?
- html - 如何让我的弹性内容停止换行?
- datetime - 将这些时间从 UTC 转换为本地时间我做错了什么?
- mobile - Chrome 开发工具移动缩放比率不会保持 100%
- c - 我的随机密码生成器引发错误。我该如何解决?
- c - 使用 go build 静态链接共享库
- ios - SwiftUI 中的比例高度(或宽度)