如何通过Android设备创建的WiFi直接网络在iOS中使用ZeroMQ发送/接收消息

时间:2016-03-04 13:26:00

标签: ios sockets chat zeromq wifi-direct

我想开发一个iOS应用程序,该应用程序应该能够向其他支持WiFi的设备发送消息(无论是iOS设备还是Android设备)并从中接收消息。

我找到了一个合适的库ZeroMQ,可用于完成任务。我已经成功编译了iOS库。

我提到了szehnder's sample代码,但该应用没有做任何事情。 它仅显示空白表视图。我检查了代码,发现接收消息的代码存在,但发送消息的方法是空的。

我们如何检测其他WiFi直连设备?发送和接收消息给他们?任何指针都非常感谢。

正如杰森所说,我正在加入迄今为止所取得的成就: 我有一个Android应用程序,使用WiFi直接连接到其他Android设备,并从他们发送和接收消息,并使用ZeroMQ。我需要使用我的iOS应用程序与该应用程序进行通信。

以下是我收到邮件的代码:

-(void) setupSockets:(ZMQContext*)myContext {

 ZMQSocket *subscriber = [myContext socketWithType:ZMQ_SUB];
[subscriber setData:nil forOption:ZMQ_SUBSCRIBE];
[subscriber connectToEndpoint: [NSString stringWithFormat:@"tcp://%@:%@", @"192.168.49.1", @"26665"]];

while (1) {

    NSData *m = [subscriber receiveDataWithFlags:0];
    if (m!=NULL) {
         NSString *s = [NSString stringWithUTF8String:[m bytes]];
        NSLog(@"Message: %@", s);

        [self performSelectorOnMainThread:@selector(postMessageNotification:) withObject:s waitUntilDone:NO];

    }
    sleep(3);

}

}

这里192.168.49.1是主机android设备的ip地址,26665是用于接收消息的端口号。控件最终调用receiveDataWithFlags:成功但在此之后什么都不做。

现在发送数据:

-(IBAction) sendMessageClicked:(id)sender {
NSString *pubEndPoint = [NSString stringWithFormat:@"tcp://%@:%@", @"192.168.49.1", @"26666"];
ZMQSocket *pubSocket = [objMeeps.context socketWithType:ZMQ_PUB];
[pubSocket connectToEndpoint:pubEndPoint];

NSData *msg = [@"hi" dataUsingEncoding:NSUTF8StringEncoding];
   [pubSocket sendData:msg withFlags:ZMQ_NOBLOCK];
}

该方法提供错误消息ZMQLogError: *** <ZMQSocket: 0x17405fdd0 (ctx=0x174029480, type=ZMQ_PUB, endpoint=tcp://192.168.49.1:26666, closed=0)>: zmq_send: Resource temporarily unavailable。当我搜索这个错误时,我得知错误是由于没有任何接收器而发生但我的iPhone连接到由Android主机使用WiFi Direct创建的WiFi网络。

我是ZeroMQ的新手,所以可能会遗漏一些非常小的东西。希望这足以澄清这个问题。请指导我。

1 个答案:

答案 0 :(得分:1)

所以你说tcp://192.168.49.1:26666是你的Android主机的地址,但据我所知,你试图从你的ios发布订阅设备,至少对于这个例子。所以,让我们明确一点:对于这个例子,忽略你的Android设备,只是试着让你的ios应用程序与自己对话。

第1步:为您的ios设备使用ip:端口

ZMQ对每个连接都有两面,一边是#34;绑定&#34; (并且可以被认为是服务器)和#34;连接的一方&#34; (可以被认为是客户端)。您的选择是灵活的,但为了示例,它可能最适合您的发布者绑定和您的订阅者进行连接。现在,你有双方连接。这可能是您所看到的错误的原因。

第2步:将您的pub套接字更改为绑定到其地址而不是连接

使用PUB / SUB时,您必须订阅&#34;主题&#34;你要。在您的示例代码中,您已订阅&#34;纳斯达克&#34;。为了您接收消息,消息文本必须以您的订阅者主题开头,例如&#34;纳斯达克:嗨&#34;会通过您的订阅过滤器。

步骤3:更改zmq_subscribe选项以订阅空字符串&#34;&#34;通过

获取每条消息

进行这三项更改应该会让您走上正轨。我强烈建议你read the guide,它涵盖了这些基本的使用指南,并且有一大堆ios示例代码可以启动。