Python 如何使服务器始终使用套接字侦听?

Python 如何使服务器始终使用套接字侦听?,python,python-2.7,sockets,server,Python,Python 2.7,Sockets,Server,iv'e构建一个基本的命令服务器: import socket import time import random server_socket = socket.socket() server_socket.bind(('0.0.0.0', 8821)) server_socket.listen(1) (client_socket, client_address) = server_socket.accept() client_input = client_socket.recv(102

iv'e构建一个基本的命令服务器:

import socket
import time
import random

server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8821))

server_socket.listen(1)

(client_socket, client_address) = server_socket.accept()

client_input = client_socket.recv(1024)
client_input = client_input.upper()


if client_input == 'TIME':
    client_socket.send(time.strftime("%c"))
elif client_input == 'RAND':
    client_socket.send(str(random.randrange(0, 11)))
elif client_input == 'NAME':
    client_socket.send("My master called me \"Arik\". Funny, ha?")
else:
    client_socket.send("Unknown command")

if len(client_input) > 4 or len(client_input) < 4:
    client_socket.send("The length of your messege\nneeds to be 4 chracters.\nI know only 4 commands.\nRAND, TIME, NAME & EXIT.\nThanks.")


client_socket.close()
server_socket.close()

现在我想让服务器一直听命令,直到他得到一个“退出”命令。我不太明白怎么做,所以我想请你帮我。非常感谢

我自己从未使用过python网络,但我认为这会奏效。 您可以将服务器侦听器放在一个循环中,如果它接收到EXIT,则中断该循环

while(true):
    server_socket.listen(1)

    (client_socket, client_address) = server_socket.accept()

    client_input = client_socket.recv(1024)
    client_input = client_input.upper()


    if client_input == 'TIME':
        client_socket.send(time.strftime("%c"))
    elif client_input == 'RAND':
        client_socket.send(str(random.randrange(0, 11)))
    elif client_input == 'NAME':
        client_socket.send("My master called me \"Arik\". Funny, ha?")
    elif client_input == 'EXIT':
          break;
    else:
        client_socket.send("Unknown command")

    if len(client_input) > 4 or len(client_input) < 4:
        client_socket.send("The length of your messege\nneeds to be 4 chracters.\nI know only 4 commands.\nRAND, TIME, NAME & EXIT.\nThanks.")

client_socket.close()
server_socket.close()
while(true):
服务器\u套接字。侦听(1)
(client_socket,client_address)=服务器_socket.accept()
client\u input=client\u socket.recv(1024)
client_input=client_input.upper()
如果客户端输入=‘时间’:
客户端\u套接字.send(time.strftime(“%c”))
elif客户端_输入=='RAND':
client_socket.send(str(random.randrange(0,11)))
elif client_input==“NAME”:
client_socket.send(“我的主人叫我\“Arik\”。好笑,哈?”)
elif client_input==“EXIT”:
打破
其他:
客户端\u socket.send(“未知命令”)
如果len(客户机输入)>4或len(客户机输入)<4:
client\u socket.send(“消息的长度\n需要4个字符。\n我只知道4个命令。\n带、时间、名称和退出。\n堆栈。”)
client_socket.close()
服务器\u套接字。关闭()

我本人从未使用过python网络,但我认为这会奏效。 您可以将服务器侦听器放在一个循环中,如果它接收到EXIT,则中断该循环

while(true):
    server_socket.listen(1)

    (client_socket, client_address) = server_socket.accept()

    client_input = client_socket.recv(1024)
    client_input = client_input.upper()


    if client_input == 'TIME':
        client_socket.send(time.strftime("%c"))
    elif client_input == 'RAND':
        client_socket.send(str(random.randrange(0, 11)))
    elif client_input == 'NAME':
        client_socket.send("My master called me \"Arik\". Funny, ha?")
    elif client_input == 'EXIT':
          break;
    else:
        client_socket.send("Unknown command")

    if len(client_input) > 4 or len(client_input) < 4:
        client_socket.send("The length of your messege\nneeds to be 4 chracters.\nI know only 4 commands.\nRAND, TIME, NAME & EXIT.\nThanks.")

client_socket.close()
server_socket.close()
while(true):
服务器\u套接字。侦听(1)
(client_socket,client_address)=服务器_socket.accept()
client\u input=client\u socket.recv(1024)
client_input=client_input.upper()
如果客户端输入=‘时间’:
客户端\u套接字.send(time.strftime(“%c”))
elif客户端_输入=='RAND':
client_socket.send(str(random.randrange(0,11)))
elif client_input==“NAME”:
client_socket.send(“我的主人叫我\“Arik\”。好笑,哈?”)
elif client_input==“EXIT”:
打破
其他:
客户端\u socket.send(“未知命令”)
如果len(客户机输入)>4或len(客户机输入)<4:
client\u socket.send(“消息的长度\n需要4个字符。\n我只知道4个命令。\n带、时间、名称和退出。\n堆栈。”)
client_socket.close()
服务器\u套接字。关闭()

您只需运行一个循环,在收到
'exit'
之前一直从客户端接收:

import socket
import time
import random

server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8821))

server_socket.listen(1)

(client_socket, client_address) = server_socket.accept()

while True:
    client_input = client_socket.recv(1024).upper()
    if len(client_input) > 4 or len(client_input) < 4:
        client_socket.send("The length of your messege\nneeds to be 4 chracters.\nI know only 4 commands.\nRAND, TIME, NAME & EXIT.\nThanks.")
    else:
        if client_input == 'TIME':
            client_socket.send(time.strftime("%c"))
        elif client_input == 'RAND':
            client_socket.send(str(random.randrange(0, 11)))
        elif client_input == 'NAME':
            client_socket.send("My master called me \"Arik\". Funny, ha?")
        elif client_input == 'EXIT':
            client_socket.send("Exiting.")
            break
        else:
            client_socket.send("Unknown command")

client_socket.close()
server_socket.close()

您只需运行一个循环,在接收到
'exit'
之前一直从客户端接收:

import socket
import time
import random

server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8821))

server_socket.listen(1)

(client_socket, client_address) = server_socket.accept()

while True:
    client_input = client_socket.recv(1024).upper()
    if len(client_input) > 4 or len(client_input) < 4:
        client_socket.send("The length of your messege\nneeds to be 4 chracters.\nI know only 4 commands.\nRAND, TIME, NAME & EXIT.\nThanks.")
    else:
        if client_input == 'TIME':
            client_socket.send(time.strftime("%c"))
        elif client_input == 'RAND':
            client_socket.send(str(random.randrange(0, 11)))
        elif client_input == 'NAME':
            client_socket.send("My master called me \"Arik\". Funny, ha?")
        elif client_input == 'EXIT':
            client_socket.send("Exiting.")
            break
        else:
            client_socket.send("Unknown command")

client_socket.close()
server_socket.close()

检查一下。基本上,只需在循环中运行它,并在套接字服务器上继续运行
accept()
,在套接字上继续运行
recv()
。基本上,只需在循环中运行它,并在套接字服务器上继续运行
accept()
,在套接字上继续运行
recv()
。很高兴提供帮助,如果您发现它有用,请随意使用:-)文件“/Networks/EX2.6---server.py”,第13行,在client\u input=client\u socket.recv(1024)。super()socket.error:[Errno 54]Peer重置连接由于您的客户端在发送
“exit”
之前正在断开连接,我刚刚编辑了答案以添加修复程序。很高兴提供帮助,如果您觉得有用,请随时访问:-)文件“/Networks/EX2.6---server.py”,第13行,在client\u input=client\u socket.recv(1024)。supper()socket.error:[Errno 54]Peer重置连接由于您的客户端在发送“退出”之前正在断开连接,我刚刚编辑了答案以添加修复程序。