Wifi设备到设备通信问题

hum*_*rim 6 iphone xcode network-programming objective-c wifi

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

它在我的网络工作正常和另一个网络也.

但它不能在我的客户端站点工作.

我花了一些时间在客户端站点来解决设备没有相互通信的问题,这就是我找到的.他们在他们的安全设置中阻止对等通信......"并且我的设备通信被识别为点对点.

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

原型WIFI应用程序工作概念


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

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

并且它还将从TcpServer类调用"start"方法来设置端口号.

之后它将从TcpServer类调用"enableBounjourWithDomain"方法.

上述方法使用称为标识符的参数调用(它是通用名称,例如:WiTap),并且发送方部分正在使用此公共标识符搜索设备.

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

获取自己的设备名称


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

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

获取新服务名称后,我们将检查它是否与我们从"DidEnabledBounjer"委托获得的设备名称相同.

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

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

发现新设备:


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

当新设备连接在同一个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>

ott*_*t-- 1

在 WiTap 源 Networking/TCPServer.m 中,套接字的端口设置为零(= 内核选择端口号,并且其值大于 50000)。您可以将 0 更改为 81,这样爱管闲事的安全设置将不再将您归类为点对点。1 到 1023 之间的任何值都可以。