在基于套接字的app中的特定用户之间发送数据

时间:2014-06-18 12:25:12

标签: python ios sockets network-programming twisted

我的应用中有两种用户,让我们说一个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()

2 个答案:

答案 0 :(得分:0)

我看到了代码:

for c in self.factory.clients:
   c.message(msg)

您应该通过包含目标来自定义消息对象。然后在此服务器代码中,仅将消息发送到正确的消息。

答案 1 :(得分:0)

此代码不是p2p方法。这是您连接的服务器。这是一个聊天服务器。

对于p2P方法,您可以自定义此服务器脚本的代码,以便让iPhone找到合作伙伴。然后直接与他沟通。

所以,解决方案是: - 您将此服务器脚本保留为跟踪连接到服务器的客户端 - 每当客户想要与另一个客户进行通信时,它将联系服务器以询问该客户端是否已连接,以及与他通信所需的信息(IP,端口)。 - 如果服务器响应正常,则直接为该客户端创建套接字。