您好,
此函数打印套接字recv()的输出。在我的代码中,套接字连接到三星电视。
def connection_status(self):
connection_status = sock.recv(64)
label_connection_status = "Status: ", connection_status
label_connection_status = Label(self.master, text= label_connection_status)
label_connection_status.grid(row=7, column=3, columnspan=4, padx=(15,0), ipady=8, sticky=W)
标签给我这个:
print("Status: ", connection_status)
我得到了这个:('Status: ', '\x00\x0c\x00iapp.samsung\x04\x00d\x00\x01\x00')
print(label_connection_status)
我得到了这个:.139719774023552
我的问题是:
如何格式化输出以及为什么输出print(label_connection_status)
.139719774023552
??
如果recv()返回某些内容,我想在标签中写入“Status:Connected”,如果recv()返回“”,则表示“Status:Disconnected”(不要返回任何思考)
我想每1秒用recv()更新连接状态
请帮帮我!抱歉我的英语不好。 谢谢。
答案 0 :(得分:1)
对于第二个和第三个问题,您可以执行以下操作: sock.settimeout(1)
try:
data = sock.recv(64)
print 'Status: Connected'
except socket.timeout:
data = ''
print 'Statuc: Disconnected'
在其中将超时设置为1秒,如果连接超时,则打印将断开连接。
至于标签,标签来自Tkinter吗?如果我没记错的话,那个数字代表你的tkinter窗口(每个窗口和窗口的子窗口都有数字代表它们到操作系统)。我不记得究竟是如何运作的,但我很确定你得到了什么。如果你想要标签的文本,你应该使用label_name [" text"]或label_name.cget(" text")。
要回答您的后续问题,请参阅以下代码,将此部分放在 init 函数中
#Code to put in your __init__ function
self.connection_label = Label(self.master, text= '')
self.connection_label.grid(row=7, column=3, columnspan=4, padx=(15,0), ipady=8, sticky=W)
self.sock = socket.socket()
self.sock.connect(('127.0.0.1', 5555))
self.sock.settimeout(1)
(别忘了改变它的ip和端口) 这是你需要的功能:
def connection_status(self):
try:
data = self.sock.recv(64)
self.connection_label['text'] = 'Status: Connected'
except socket.timeout:
data = ''
self.connection_label['text'] = 'Status: Disconnected'
#This makes the program call this every 1000 milliseconds
self.master.after(1000, self.connection_status, self.master)
底部的行使程序调用该函数每x毫秒,在这种情况下为1000,因此为1秒。也不要忘记在init函数中实际调用函数connection_status。