Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios CFStream连接在使用公共ip时无法连接_Ios_Xcode4.5_Cfstream - Fatal编程技术网

Ios CFStream连接在使用公共ip时无法连接

Ios CFStream连接在使用公共ip时无法连接,ios,xcode4.5,cfstream,Ios,Xcode4.5,Cfstream,我是iOS和Objective c的新手。。。。 在我的应用程序中,我正在使用CFStream建立与服务器的套接字连接。。问题是 当我使用本地ip(192.168.10.246)运行我的程序时,连接已建立,但当我用公共ip替换它时,视图将冻结并给出以下错误事件 我目前正在模拟器上运行 2013-06-27 12:50:41.778 BarcodeGenerator[446:c07] Start StreamEvent 8 2013-06-27 12:50:41.778 BarcodeGenera

我是iOS和Objective c的新手。。。。 在我的应用程序中,我正在使用CFStream建立与服务器的套接字连接。。问题是 当我使用本地ip(192.168.10.246)运行我的程序时,连接已建立,但当我用公共ip替换它时,视图将冻结并给出以下错误事件

我目前正在模拟器上运行

2013-06-27 12:50:41.778 BarcodeGenerator[446:c07] Start StreamEvent 8
2013-06-27 12:50:41.778 BarcodeGenerator[446:c07] Can not connect to the host!
2013-06-27 12:50:41.779 BarcodeGenerator[446:c07] Start StreamEvent 8
2013-06-27 12:50:41.780 BarcodeGenerator[446:c07] Can not connect to the host!
我的代码是

    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)ip, 54000, &readStream, &writeStream);

    inputStream = (NSInputStream *)readStream;
    outputStream = (NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];

    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

    [inputStream open];
    [outputStream open];

    NSData *data = [[NSData alloc] initWithData:[pinno dataUsingEncoding:NSASCIIStringEncoding]];
    [outputStream write:[data bytes] maxLength:[data length]];
    [outputStream close];
我是否需要为公共ip添加一些额外的代码。。。或者这是网络连接中的防火墙问题还是Xcode中的设置??? 请帮忙

Edit:
我已附上wireshark日志: 我的目的地公共ip是221.135.139.46

No.     Time           Source                Destination           Protocol Length Info
     83 2.426998000    192.168.43.131        221.135.139.46        TCP      78     50853 > 54000 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=16 TSval=61451776 TSecr=0 SACK_PERM=1

Frame 83: 78 bytes on wire (624 bits), 78 bytes captured (624 bits) on interface 0
Ethernet II, Src: Apple_13:f4:a1 (00:23:12:13:f4:a1), Dst: SamsungE_75:d9:c7 (94:63:d1:75:d9:c7)
Internet Protocol Version 4, Src: 192.168.43.131 (192.168.43.131), Dst: 221.135.139.46 (221.135.139.46)
Transmission Control Protocol, Src Port: 50853 (50853), Dst Port: 54000 (54000), Seq: 0, Len: 0

可能是防火墙相关的错误。您是否将公共ip转发给主机?你打开防火墙的端口了吗。在尝试连接到服务器之前,测试是否连接到已知的可工作公共ip

你需要:

根据您路由器的级别,此术语将被定义为端口 转发、虚拟IP或静态NAT转换(有几种 其他人(但你明白了)


如果您的android版本正常工作,可能是其他原因导致了问题。RayWenderlich对如何实现流应用程序有很好的理解。您可以使用来分析网络上实际传递的内容,以便进一步分析,还可以查看路由器日志。我不确定,因为你说安卓与公共ip一起工作

这家伙有另一种处理问题的方法,听起来和你的类似。问题是他的应用程序暂停,并且在行
[outputStream write:[data bytes]maxLength:[data length]]上什么也没有发生

我刚检查了我的防火墙设置。。。我的防火墙已关闭。。。你能告诉我任何已知的公共ip,我可以测试我的连接你需要转发连接,你在使用什么路由器/防火墙?我在使用我的办公网络。。。所以我想它可能受到防火墙的保护,不允许建立任何公共连接。。。但后来我尝试通过我的个人数据卡网络。。。但还是没有运气。。。我已经在android中使用套接字连接实现了一个相同的副本。它工作正常。。。不知道IOS您需要通过路由器将公共ip转发到要连接到Wireshark日志的主机吗?你应该用关于workng android版本的信息以及你一直在使用的教程更新你的问题