【问题标题】:How can I constantly change the message being sent from the server to the client?如何不断更改从服务器发送到客户端的消息?
【发布时间】:2022-08-19 02:53:21
【问题描述】:

我正在为我和我的朋友开发一个小消息应用程序,但我的客户只收到一个对象,这里有点难以解释......

服务器:

#server
import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 5034))
s.listen(5)
while True:
    clt,adr=s.accept()
    clt.send(bytes(\"hello\", \"utf-8\"))

客户:

#client
import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((\"192.168.56.1\", 5034))
msg=s.recv(1024)
print(msg.decode())

现在我怎样才能做到这一点,以便我可以不断更改正在发送的消息?

  • 好吧,如果您想向客户端发送多条消息,那么您需要使您的while 循环更加复杂。您可以发送任意数量的数据,但是当您再次调用accept 时,第一个套接字将被关闭。您还需要在客户端中循环 s.recv 调用以接收多条消息。
  • @TimRoberts 你所说的“复杂”到底是什么意思?您能否发送我的代码的编辑版本?
  • 当您致电clt.send(bytes(\"hello\", \"utf-8\")) 时,它会发送您好。如果您希望它发送其他内容,那么您必须编写您希望它发送的内容而不是“hello”,例如一些变量或函数调用。你知道基本的 Python 编程吗?

标签: python sockets


【解决方案1】:

这是一个例子。该服务器侦听您的套接字,并产生一个线程来处理每个新连接。这样,它可以返回accept 以侦听更多连接。然后,处理程序每​​秒只喷一次时间。

import socket
import threading
import time

def handle(sock):
    while True:
        sock.send( time.ctime().encode('utf-8') )
        time.sleep(1)

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 5034))
s.listen(5)
while True:
    clt,adr=s.accept()
    t = threading.Thread( target=handle, args=(clt,), daemon=1 )
    t.start()

这个客户永远听着那美妙的音乐:

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 5034))
while True:
    msg=s.recv(1024)
    print(msg.decode())

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 2013-06-24
    • 2017-01-12
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多