我的应用中有两种用户,让我们说一个A和B用户。我有一个A和B之间有一对多关系的数据库,所以A可以有多个B&B,而B只有一个A.
我需要将数据从A发送到B,从B发送到A.
我遵循基于Raywenderlich的套接字应用和服务器tuturial http://www.raywenderlich.com/3932/,本教程允许用户连接服务器并将数据发送给所有其他用户,即聊天室。为此,创建了一个用于标识用户的协议:iam:username
我如何才能将数据仅发送给关系中的用户,而不是教程中显示的任何联合用户?
本教程使用Python和Twisted创建服务器,以下是使用的代码:
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class IphoneChat(Protocol):
def connectionMade(self):
#self.transport.write("""connected""")
self.factory.clients.append(self)
print "clients are ", self.factory.clients
def connectionLost(self, reason):
self.factory.clients.remove(self)
def dataReceived(self, data):
#print "data is ", data
a = data.split(':')
if len(a) > 1:
command = a[0]
content = a[1]
msg = ""
if command == "iam":
self.name = content
msg = self.name + " has joined"
elif command == "msg":
msg = self.name + ": " + content
print msg
for c in self.factory.clients:
c.message(msg)
def message(self, message):
self.transport.write(message + '\n')
factory = Factory()
factory.protocol = IphoneChat
factory.clients = []
reactor.listenTCP(80, factory)
print "Iphone Chat server started"
reactor.run()
答案 0 :(得分:0)
我看到了代码:
for c in self.factory.clients:
c.message(msg)
您应该通过包含目标来自定义消息对象。然后在此服务器代码中,仅将消息发送到正确的消息。
答案 1 :(得分:0)
此代码不是p2p方法。这是您连接的服务器。这是一个聊天服务器。
对于p2P方法,您可以自定义此服务器脚本的代码,以便让iPhone找到合作伙伴。然后直接与他沟通。
所以,解决方案是: - 您将此服务器脚本保留为跟踪连接到服务器的客户端 - 每当客户想要与另一个客户进行通信时,它将联系服务器以询问该客户端是否已连接,以及与他通信所需的信息(IP,端口)。 - 如果服务器响应正常,则直接为该客户端创建套接字。