Python 运行其他代码并向客户端发送更新的套接字服务器
这可能已经得到了回答,但没有找到任何东西或不知道要搜索什么。我有一个为多个客户机(下面的代码)线程的套接字服务器,希望服务器运行代码(即检查某些东西的状态),然后向客户机发送消息。我该怎么做呢 为了澄清这一点,我需要学习如何将异步任务添加到此代码中,以便它可以进行检查,并在需要时向客户端发送消息 示例:当有客户机连接时,我希望服务器不断检查日志文件,如果它发生更改,我希望它向客户机发送消息 Server.py(工作代码)Python 运行其他代码并向客户端发送更新的套接字服务器,python,sockets,Python,Sockets,这可能已经得到了回答,但没有找到任何东西或不知道要搜索什么。我有一个为多个客户机(下面的代码)线程的套接字服务器,希望服务器运行代码(即检查某些东西的状态),然后向客户机发送消息。我该怎么做呢 为了澄清这一点,我需要学习如何将异步任务添加到此代码中,以便它可以进行检查,并在需要时向客户端发送消息 示例:当有客户机连接时,我希望服务器不断检查日志文件,如果它发生更改,我希望它向客户机发送消息 Server.py(工作代码) 我在下面添加了代码server.py,它用于在日志文件更改时发送状态更改消
我在下面添加了代码server.py,它用于在日志文件更改时发送状态更改消息
import socket
import sys
import time
from thread import *
HOST = 'localhost' # Symbolic name meaning all available interfaces
PORT = 9999 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
#Bind socket to local host and port
try:
s.bind((HOST, PORT))
except socket.error as msg:
print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
sys.exit()
print 'Socket bind complete'
#Start listening on socket
s.listen(10)
print 'Socket now listening'
#Function for handling connections. This will be used to create threads
def clientthread(conn):
#Sending message to connected client
conn.send('Welcome to the server. Type something and hit enter\n') #send only takes string
data = conn.recv(1024)
#infinite loop so that function do not terminate and thread do not end.
while True:
logfile = open("serverlog.txt","r")
#Receiving from client
logfile.seek(0,2)
while True:
line = logfile.readline()
if not line:
time.sleep(0.1) # Sleep briefly
continue
reply = 'File Changed...Your Data' + data
break
conn.sendall(reply)
#came out of loop
conn.close()
#now keep talking with the client
while 1:
#wait to accept a connection - blocking call
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
#start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
start_new_thread(clientthread ,(conn,))
s.close()
要测试它,请在一个命令提示符下运行此server.py并保持其打开状态。像这样的
> python server.py
Socket created
Socket bind complete
Socket now listening
并从其他cmd提示符运行一个简单的telnet来验证连接
telnet localhost 9999
用IP替换本地主机。在这些telnet连接上键入任何内容,您都会得到正确的响应。
您还可以在server.py cmd提示符下查看所做的连接
正如我提到的,检查。您在使用此代码时面临什么问题?r u卡在哪里?@drt上面的代码可以工作,我只是不知道如何添加一个同时运行的方法或函数,如果需要,它可以向客户端发送消息。例如,如果cpu使用率超过50%,请向客户端发送一条消息,说明是这样。你是否尝试过telnet此链接应该可以帮助你I don’你不明白我的问题。我没有遇到连接困难。我试图让server.py在与客户端通信的同时执行任务。下面是一个我希望它执行的示例:当有客户端连接时,我希望服务器检查日志文件,如果它发生更改,我希望它向客户端发送消息。我更新了答案,包括相应地向客户端发送消息的代码,但您需要为自己更新文件更改逻辑。更新了代码,在文件更改时发送消息变化。尝试更改文件,您应该会收到“文件已更改”的消息。好的,这就是我所要查找的,是否仍然可以接受来自客户端的消息?是的,您可以在外部while中添加
data=clientsock.recv(1024)
或BUFF,然后在内部while中添加此选项。
telnet localhost 9999