使用公共IP时,CFStream连接无法连接

时间:2013-06-27 07:41:08

标签: 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 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

2 个答案:

答案 0 :(得分:1)

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

你需要:

  

根据路由器的级别,此术语将为Port   转发,虚拟IP或静态NAT转换(有一些   其他人,但你明白了。)

如果您的Android版本正常运行,可能还有其他原因造成问题。 Ray Wenderlich对如何实现流应用程序有很好的example。您可以使用wireshark分析网络上实际传递的内容,以进一步分析并查看路由器日志。我不确定,因为你说android工作与公共IP

答案 1 :(得分:0)

这家伙有另一种方法来处理write to the NSOutputStream他的问题听起来与你的相似。问题是他的app停滞不前,[outputStream write:[data bytes] maxLength:[data length]];

行没有任何反应
相关问题