2013-12-20 25 views
1

嗨即时通讯新的python编程。我可以知道为什么我的服务器没有收到我的客户端发送的消息吗?我试着从客户端发送数据到服务器,使服务器在控制台中显示它...不能接收数据使用Asyncore Python

Client.py

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

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() 

回答

1

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

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

服务器插座与每个服务器套接字连接接受

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

我建议看看Twisted代替。它比异步版更加主动地维护,更好的文档记录和更多功能。这里有一个最小的扭曲为基础的例子,做什么,我想你想你的应用程序做的:

tx_client.py

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

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"])