将数据从套接字发送到另一个套接字

时间:2015-01-23 09:48:27

标签: python sockets twisted

下面的代码通过iPhone的套接字接收数据,然后我想将接收的数据发送到另一个通过不同套接字运行的python脚本。我的尝试如下。另一台服务器接收到该消息,但是当我发送第二消息时,我得到一个错误的文件描述符。是否有更改下面的代码,以便它可以连续发送接收的数据直接到另一个插座?

import os
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
from threading import Thread



class IphoneChat(Protocol):


    def connectionMade(self):
        self.factory.clients.append(self)
        print "A new client has connected"

    def connectionLost(self, reason):
        print "client disconnected"

    def dataReceived(self, data):
        print "Message Received: ", data
        TCP_IP = '127.0.0.1'
        TCP_PORT = 5000
        BUFFER_SIZE = 1024
        self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((TCP_IP, TCP_PORT))
        s.send(data)
        s.close()




    def message(self, message):
        self.transport.write(message + '\n')



factory = Factory()
factory.protocol = IphoneChat
factory.clients = []



reactor.listenTCP(3000, factory)
print "listening to 3000"

reactor.run()

1 个答案:

答案 0 :(得分:0)

您的IphoneChat代码中存在一些错误:缺少import socketself.s = socket.socket(...)应该只绑定到本地变量s,而不是实例变量{ {1}}。

尽管如此,我认为异常(self.s)实际上是在“其他”Python脚本中引发的,您不会为其显示任何代码。看看代码是有帮助的,但是,您可能正在关闭主服务器套接字以响应socket.error: [Errno 9] Bad file descriptor脚本关闭的连接,而不是 IphoneChat返回的每个连接套接字。这里有一些粗略的代码应该作为接收服务器:

socket.accept()

我的猜测是你有类似上面的代码,但是你正在关闭主服务器套接字而不是远程连接。