使用一个套接字接收和发送Python消息

2024-09-30 01:29:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它已经使用socket不时地向对等方发送消息。我想添加一个特性,即套接字异步侦听入站消息,然后作出反应,例如处理内容并重新发送回复。有可能只用一个插座吗?我必须使用一个套接字,因为我的对等方创建了它的套接字本地主机:30000。在

编辑:

这是我迄今为止所做的一些尝试的代码。在

来自侦听线程的Run()方法:

def run(self):
    print("Started listening to messages from peer...")
    while True:
        socketLock.acquire()
        try:
            self.listenToInboundMessages()
        finally:
            socketFlag.set()
            socketLock.notify()
            socketLock.release()

def listenToInboundMessages(self):
    clientsocket.settimeout(1)
    received = clientsocket.recv(BUFF)
    print(received)

发送消息的线程的Run()方法:

^{pr2}$

我使用socketLock条件变量和socketFlag类来协调这两个线程。在


Tags: 方法runself脚本消息defsocket线程
1条回答
网友
1楼 · 发布于 2024-09-30 01:29:48

对于windows,您可以使用select类将套接字连接的列表筛选为3个列表、准备就绪的套接字、准备写入的套接字和有错误的套接字。在

这里是p2p套接字连接的基本实现(不是基于类的)。在

import socket, select, time

s = socket.socket()
s.bind(("10.48.72.71", 8080))
s.listen(10)

connections = [s]

while True:
    time.sleep(.1)

    recv,write,err = select.select(connections,connections,connections)

    for socket in recv:
        if socket == s:
            client,address = socket.accept()
            connections.append(client)
        else:
            msg = socket.recv(4096).decode("UTF-8")
            print("Recieved message from a socket, message was: "+str(msg))

    for socket in write:
        socket.send(bytes("Hi", "UTF-8"))

    for socket in err:
        print("Error with a socket")
        socket.close()
        connections.remove(socket)

相关问题 更多 >

    热门问题