Wifi设备到设备通信问题

时间:2011-09-15 13:47:28

标签: iphone objective-c xcode network-programming wifi

我在我的应用程序中编写了一个代码,用于启用设备到设备的无线通信(仅传输文本/字符串)。代码与从Apple.Apple下载的Apple示例 Witap 应用程序相同.COM。

它在我的网络中运行良好,另外还有其他网络。

但是它无法在我的客户端网站上运行。

我花时间在客户端网站上解决了设备之间没有通信的问题,这就是我找到的。他们在安全设置中阻止对等通信......“我的设备通信被识别为点对点。

有没有办法解决这个问题 除苹果支持的PEER 2 PEER wifi通信以外还有什么吗?

原型WIFI应用程序工作概念


WiFi应用程序主要有四个类,分别名为AppController,Picker,BrowserViewController,TCP Server。

当应用程序加载时,AppController类将初始化NSInputStraem和NSOutPut Stream。

并且它还将从TcpServer类调用“start”方法来设置端口号。

之后它将从TcpServer类调用“enableBounjourWithDomain”方法。

上述方法使用名为identifier的参数调用(它是一个通用名称,例如:WiTap),发件人部分正在使用此公共标识符搜索设备。

执行此方法后,发件人设备可以识别我们的设备并能够连接。

获取自己的设备名称


Tcp serverServer委托“DidEnabledBounjer”将在上述代码执行后工作,它将提供当前设备名称。

然后NSNetservice委托“didFindService”将起作用(它在发现每个服务时起作用)并检索发现的服务名称。

获取新服务名称后,我们将检查它是否与我们从“DidEnabledBounjer”代表获得的设备名称相同。

如果没有,新服务名称将添加到名为services的NSMutable数组中。

然后,服务数组绑定到表视图,我们可以看到已发现设备名称的列表。

发现新设备:


没有用于发现新设备的计时器设置。

当新设备连接在同一个WiFi网络中时,“DidFindservice”委托将触发(它是在BrowserViewController类中实现的NSNetservice委托)。

DidFindservice将提供新的设备名称。获取后,我们将检查它是否与我们从“DidEnabledBounjer”代表获得的设备名称相同。

如果没有,服务名称将添加到名为services的NSMutable数组中。

然后根据设备名称对所有发现的设备名称进行排序,然后重新加载表视图。

从表视图中选择设备名称后工作


在TableView上单击设备名称后,它将调用“didSelectRowAtIndexPath”委托,该委托在BrowserViewController类中实现(它是一个TableView类委托)。

它将根据TableView索引从我们的服务数组中选择一个NetService名称(保存所有发现的服务),并将结果NSService设置为当前服务。

触发委托“didResolveInstance”,它将设置InPutStream和OutPutStream值。

获取InPutStream和OutPutStream的值后,它将调用“OpenStream”方法打开输入和输出Streams。

最后,它会释放NSService和Picker对象,并准备发送包含所选设备的消息。

使用发送按钮


使用字符串参数从BrowserViewController类调用“send”函数。它可以是用户文本输入或语音识别后生成的字符串。

将输入字符串转换为uint_8数据类型并将其发送到接收设备。

接收方工作


当数据传到接收设备时,将触发“TcpServerAcceptCallBack”委托(在TcpServer类中实现)。

它将通过另一个名为“HandleNewConnectionFromAddress”的TcpServer类委托从BrowserViewControll calss调用“DidAcceptConnectionForServer”方法。

触发“AppController”类中的“流句柄委托”,它将检查是否有任何可用的位置。

如果字节可用,则将uint_8类型数据转换为字符串,我们将在接收器文本框中显示结果字符串。

并且还使用结果字符串加载图像并在AppBundle的图像视图中显示它。< / p为H.

2 个答案:

答案 0 :(得分:1)

在WiTap源Networking / TCPServer.m中,套接字的端口设置为零(=内核选择端口号,它的值大于50000)。您可以将0更改为例如81,八卦安全设置将不再将您归类为peer2peer。 1到1023之间的任何值都应该有效。

答案 1 :(得分:0)

您应该进行基本的连接测试,以确定该网络究竟阻止了什么。

从简单的ping开始,然后转到UDP和TCP级别。您可能会发现允许某种形式的通信。

如果没有,您可以尝试告诉他们的安全人员接受特定范围的IP地址和/或端口号之间的某种形式的通信,并相应地调整您的应用程序。