python - Linux Python 服务器无法正常终止

标签 python linux

我在端口 5555 上运行了一个 echo 服务器,它可以完美地接收和返回数据,但无法正确关闭。当我输入退出命令时,它只是不断打印空白输出。有人可以帮忙吗,谢谢。

Echo working correctly

Keeps printing received data (which is empty)

服务器端代码

import socket as sk
server_socket = sk.socket(sk.AF_INET, sk.SOCK_STREAM)
server_socket.setsockopt(sk.SOL_SOCKET, sk.SO_REUSEADDR, 1)
server_socket.bind(("localhost", 5555))
server_socket.listen(1)
connection, client_address = server_socket.accept()
while True:
   data_in = connection.recv(1024)
   message = data_in.decode()
   message.strip()
   if message == "quit" or message == "QUIT":
       break
   print("" , message)
   data_out = message.encode()
   connection.send(data_out)
connection.shutdown(sk.SHUT_RDWR)
connection.close()
server_socket.shutdown(sk.SHUT_RDWR)
server_socket.close()

客户端代码

import socket as sk
client_socket = sk.socket(sk.AF_INET, sk.SOCK_STREAM)
client_socket.connect(('localhost', 5555))
while True:
  #input message
  message = input("Enter message to send or type quit to quit: ")

  #check if user wants to quit
  if message == "quit" or message == "QUIT":
      break

  #encode the user input and send it to the server
  client_socket.send(message.encode())

  #save the data sent by the server
  recmess = client_socket.recv(1024)

  #print the server reply
  print("Server: ", recmess.decode())
  print()

#print student details
print("Connection Closed")

client_socket.shutdown(sk.SHUT_RDWR)
client_socket.close()

最佳答案

当您在发送消息之前在客户端跳出 while 循环(在 quit 输入的情况下)时,服务器永远不会收到关闭命令。这意味着客户端将关闭,同时让服务器保持运行状态。

解决此问题的一个方法是切换消息发送到服务器的顺序(发送,然后检查以关闭客户端)

client_socket.send(message.encode())

if message.lower() == 'quit':
    break

希望对你有帮助

关于python - Linux Python 服务器无法正常终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599100/

相关文章:

linux - 从 Windows 到 Linux 的 SVN 预提交 Hook

python - 如何在 Django 数据库设置中关闭 SSL

python - 密码字段以纯文本形式显示密码

python - 搪瓷 slider 箭头键不起作用

python - 如何删除 Matplotlib 图中的线条

Linux命令以树的形式打印目录结构

python - Pandas :同一小时内的平均值

java - Android Studio 找不到我的 JDK

PHP-FPM 和 Nginx : "Resource temporarily unavailable" errors in proxy_error_log

c++ - 一个程序可以分配多少内存?