下面的代码通过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()
答案 0 :(得分:0)
您的IphoneChat
代码中存在一些错误:缺少import socket
和self.s = socket.socket(...)
应该只绑定到本地变量s
,而不是实例变量{ {1}}。
尽管如此,我认为异常(self.s
)实际上是在“其他”Python脚本中引发的,您不会为其显示任何代码。看看代码是有帮助的,但是,您可能正在关闭主服务器套接字以响应socket.error: [Errno 9] Bad file descriptor
脚本关闭的连接,而不是 IphoneChat
返回的每个连接套接字。这里有一些粗略的代码应该作为接收服务器:
socket.accept()
我的猜测是你有类似上面的代码,但是你正在关闭主服务器套接字而不是远程连接。