每5秒循环一次套接字请求(Python)

每5秒循环一次套接字请求(Python),python,sockets,loops,Python,Sockets,Loops,如何每5秒循环一次以下代码: sendSocket = socket.socket (socket.AF_INET, socket.SOCK_STREAM) sendSocket.connect ( ( 'CENSORED', 1234 ) ) sendSocket.send ( 'request posit' ) data = sendSocket.recv( 100 ) chatLog.insert(END, data) 我希望客户端每5秒从服务器接收一次数据,我做了一次while Tru

如何每5秒循环一次以下代码:

sendSocket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
sendSocket.connect ( ( 'CENSORED', 1234 ) )
sendSocket.send ( 'request posit' )
data = sendSocket.recv( 100 )
chatLog.insert(END, data)
我希望客户端每5秒从服务器接收一次数据,我做了一次while True loop(lol),程序接口甚至没有加载,服务器被客户端淹没

我只想让服务器每隔5秒用存储在服务器上的变量更新客户机,而无需用户手动按下按钮

import socket, time
from Tkinter import *

## Main Window
gui = Tk()
gui.geometry('450x350-5+40')
gui.minsize(450,350)
gui.maxsize(450,350)
userInput = StringVar()

## Main window that displays user and server input.
chatLog = Text(gui, width=60, height=15)
chatLog.pack()

## Send Packet function, main part of the script. Sends whatever the user puts in.
def sendChat():
    sendSocket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    sendSocket.connect ( ( 'nope.com', 1234 ) )
    sendSocket.send ( e.get() )
    data = sendSocket.recv( 100 )
    chatLog.insert(END, data)
    sendSocket.close()

while True:
    sendSocket = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
    sendSocket.connect ( ( 'nope.com', 1234 ) )
    sendSocket.send ( 'request posit' )
    data = sendSocket.recv( 100 )
    chatLog.insert(END, data)
    sendSocket.close()
    time.sleep (5.0)

## Submit text button
b = Button(gui, text="Send", command=sendChat )
b.pack()

## Text entry box
e = Entry(gui, textvariable=userInput)
e.pack()

gui.mainloop()
理想情况下,在做完这些之后,你会计算出你已经睡了多长时间,然后根据需要调整你的睡眠时间以恢复同步

编辑:这假设你所做的就是这些。否则,请使用时间函数查看是否为5秒
time.localtime()
之类的。我不记得它们的名字了,但是python的lib有很好的文档记录

编辑2:尽管这可能不适用于tkinter。真的,如果原始消息中有完整的代码和tkinter,我就不会发布了。对不起

理想情况下,在做完这些之后,你会计算出你已经睡了多长时间,然后根据需要调整你的睡眠时间以恢复同步

编辑:这假设你所做的就是这些。否则,请使用时间函数查看是否为5秒
time.localtime()
之类的。我不记得它们的名字了,但是python的lib有很好的文档记录

编辑2:尽管这可能不适用于tkinter。真的,如果原始消息中有完整的代码和tkinter,我就不会发布了。对不起

请看这个问题:

您也可以在空闲后使用

def read_the_socket():
    sendSocket.send ( 'request posit' )
    data = sendSocket.recv( 100 )
    gui.after(5000, read_the_socket)


gui.after_idle(read_the_socket)
空闲后,一旦GUI不再忙,就可以调用函数。您还可以使用.after(time,function)在再次调用函数之前延迟一段特定的时间

最后,您应该真正保持与服务器的连接,而不是每次都重新连接。

请参见以下问题:

您也可以在空闲后使用

def read_the_socket():
    sendSocket.send ( 'request posit' )
    data = sendSocket.recv( 100 )
    gui.after(5000, read_the_socket)


gui.after_idle(read_the_socket)
空闲后,一旦GUI不再忙,就可以调用函数。您还可以使用.after(time,function)在再次调用函数之前延迟一段特定的时间



最后,你真的应该保持与服务器的连接,而不是每次都重新连接。

为什么你觉得需要在中间随机插入(lol)?这个问题的答案取决于你是如何创建程序界面的。你用了什么wxPython,PyQt,PySide,curses,Gtk?因为我知道,虽然True绝对不是正确的方法来正确地做某事。我还用tkinter制作GUI。(哈哈)在我看来,这会让你看起来很傻。如果你不这样做,我至少会更认真地对待问题。为什么你觉得需要在中间随机插入(lol)?这个问题的答案取决于你是如何创建你的程序界面的。你用了什么wxPython,PyQt,PySide,curses,Gtk?因为我知道,虽然True绝对不是正确的方法来正确地做某事。我还用tkinter制作GUI。(哈哈)在我看来,这会让你看起来很傻。如果你不这样做,我至少会更认真地对待问题。我这样做了,服务器现在不会被淹没,但GUI仍然没有加载。它是特金特制造的。我编辑了主要的帖子来展示整个代码。我不知道,对不起,我帮不了你。我看不出
有任何问题,而True则是。EDIT:尽管这可能不适用于tkinter。真的,如果原始消息中有完整的代码和tkinter,我就不会发布了。很抱歉啊,那是我的错,对不起。我只是假设我用什么做的并不重要,而且会有一个简单的解决方案。我这样做了,服务器现在不会被淹没,但是GUI仍然没有加载。它是特金特制造的。我编辑了主要的帖子来展示整个代码。我不知道,对不起,我帮不了你。我看不出
有任何问题,而True则是。EDIT:尽管这可能不适用于tkinter。真的,如果原始消息中有完整的代码和tkinter,我就不会发布了。很抱歉啊,那是我的错,对不起。我只是假设我用什么做的并不重要,会有一个简单的解决方案。
after(延迟、回调、args…)
在这里可能更好,因为
after\u idle
会被调用很多。这很好,也很有效,但一次之后我会得到[Errno 10054]远程服务器已强制关闭现有连接host@Brandon,服务器是你的吗?必须对服务器进行编程,以允许对单个连接进行多个请求。否则,您需要在函数中包含整个connect/send/recv/close。
after(延迟、回调、args…)
在这里可能更好,因为
after\u idle
将被多次调用。这很好,也很有效,但在我获得[Errno 10054]一次后,现有连接被远程服务器强制关闭host@Brandon,服务器是你的吗?必须对服务器进行编程,以允许对单个连接进行多个请求。否则,您需要在函数中包含整个connect/send/recv/close。