首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Asyncore Python接收数据

无法使用Asyncore Python接收数据
EN

Stack Overflow用户
提问于 2013-12-20 10:24:53
回答 1查看 319关注 0票数 1

你好,我对python编程很陌生。我能知道为什么我的服务器没有收到我的客户发送的消息吗?我试图将数据从客户端发送到服务器,并让服务器在控制台中显示.

Client.py

代码语言:javascript
复制
import asyncore
import socket


class Client(asyncore.dispatcher):
    def __init__(self,IPAddress_Server,intServerPort):
        asyncore.dispatcher.__init__(self)

        self.IPHostEntry_Server = (IPAddress_Server,intServerPort)
        self.create_socket(socket.AF_INET,socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.connect(self.IPHostEntry_Server)

    def handle_connect(self):
        print("Successfully connected to {0}".format(self.IPHostEntry_Server))

    def handle_write(self):
        bytesTx = b"DDDDDDD"
        self.send(bytesTx)
        self.close()


client = Client("127.0.0.1", 4444)

asyncore.loop()

Server.py

代码语言:javascript
复制
import asyncore
import socket

class Server(asyncore.dispatcher):

    def __init__(self,IPAddress_Server,intServerPort):
        asyncore.dispatcher.__init__(self)

        self.IPHostEntry_Server = (IPAddress_Server,intServerPort)
        self.create_socket(socket.AF_INET,socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.bind(self.IPHostEntry_Server)
        self.listen(5)

    def handle_accept(self):
        pair = self.accept()
        if pair is not None:
            sock, addr = pair
            print ('Incoming connection from %s' % repr(addr))


    def handle_read(self):
        bytesRx = self.recv(4)
        print("%s" %bytesRx)

server = Server("127.0.0.1", 4444)
asyncore.loop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-20 13:47:21

您的服务器接受连接,然后将它们放在地板上:

代码语言:javascript
复制
def handle_accept(self):
    pair = self.accept()
    if pair is not None:
        sock, addr = pair
        print ('Incoming connection from %s' % repr(addr))

服务器套接字与服务器套接字接受的每个连接是分开的。

如果您想从连接中读取字节,那么您必须做一些更多的工作来处理它上的读事件。

我建议你去看看Twisted。它比异步内核更积极地维护,更好的文档化,更有特色。下面是一个基于Twisted的最小示例,它实现了我认为您希望您的应用程序能够做的事情:

tx_client.py

代码语言:javascript
复制
from twisted.internet.task import react
from twisted.internet.defer import Deferred
from twisted.internet.protocol import Protocol
from twisted.internet.endpoints import clientFromString, connectProtocol

class SendBytes(Protocol):
    def __init__(self, data):
        self.data = data
        self.done = Deferred()

    def connectionMade(self):
        self.transport.write(self.data)
        self.transport.loseConnection()

    def connectionLost(self, reason):
        self.done.callback(None)

def main(reactor, description, data):
    endpoint = clientFromString(reactor, description)
    connecting = connectProtocol(endpoint, SendBytes(data))
    def connected(proto):
        print("Successfully connected to {0}".format(proto.transport.getPeer().host))
        return proto.done
    connecting.addCallback(connected)
    return connecting

if __name__ == '__main__':
    react(main, [b"tcp:host=127.0.0.1:port=4444", b"DDDDDD"])

tx_server.py

代码语言:javascript
复制
from twisted.internet.task import react
from twisted.internet.defer import Deferred
from twisted.internet.protocol import Factory, Protocol
from twisted.internet.endpoints import serverFromString

class ReadBytes(Protocol):
    def connectionMade(self):
        print("Incoming connection from {}".format(self.transport.getPeer()))

    def dataReceived(self, data):
        print("Received {}".format(data))

def main(reactor, description):
    endpoint = serverFromString(reactor, description)
    endpoint.listen(Factory.forProtocol(ReadBytes))
    return Deferred()

if __name__ == '__main__':
    react(main, [b"tcp:interface=127.0.0.1:port=4444"])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20701437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档