Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行其他代码并向客户端发送更新的套接字服务器_Python_Sockets - Fatal编程技术网

Python 运行其他代码并向客户端发送更新的套接字服务器

Python 运行其他代码并向客户端发送更新的套接字服务器,python,sockets,Python,Sockets,这可能已经得到了回答,但没有找到任何东西或不知道要搜索什么。我有一个为多个客户机(下面的代码)线程的套接字服务器,希望服务器运行代码(即检查某些东西的状态),然后向客户机发送消息。我该怎么做呢 为了澄清这一点,我需要学习如何将异步任务添加到此代码中,以便它可以进行检查,并在需要时向客户端发送消息 示例:当有客户机连接时,我希望服务器不断检查日志文件,如果它发生更改,我希望它向客户机发送消息 Server.py(工作代码) 我在下面添加了代码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