我在我的应用程序中编写了一个代码,用于启用设备到设备的无线通信(仅传输文本/字符串)。代码与从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.
答案 0 :(得分:1)
在WiTap源Networking / TCPServer.m中,套接字的端口设置为零(=内核选择端口号,它的值大于50000)。您可以将0更改为例如81,八卦安全设置将不再将您归类为peer2peer。 1到1023之间的任何值都应该有效。
答案 1 :(得分:0)
您应该进行基本的连接测试,以确定该网络究竟阻止了什么。
从简单的ping开始,然后转到UDP和TCP级别。您可能会发现允许某种形式的通信。
如果没有,您可以尝试告诉他们的安全人员接受特定范围的IP地址和/或端口号之间的某种形式的通信,并相应地调整您的应用程序。