首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用公网ip时CFStream连接无法连接

使用公网ip时CFStream连接无法连接
EN

Stack Overflow用户
提问于 2013-06-27 15:41:08
回答 2查看 527关注 0票数 0

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

我现在在模拟器上运行...

代码语言:javascript
运行
复制
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!

我的代码是..

代码语言:javascript
运行
复制
    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中的设置?请帮帮我!

代码语言:javascript
运行
复制
Edit:

我已经附上了wireshark日志:我的目的公网ip是221.135.139.46....

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-27 15:45:52

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

您需要:

根据路由器级别的不同,此术语将是端口转发、虚拟IP或静态NAT转换(也有一些其他术语,但您应该明白这一点)。

如果您的android版本工作正常,则可能是其他原因导致了问题。Ray Wenderlich有一个很好的关于如何实现流应用程序的example。您可以使用wireshark分析网络上实际传递的内容,以便进一步分析,还可以查看路由器日志。我不确定,因为你说android和公网ip一起工作

票数 1
EN

Stack Overflow用户

发布于 2013-07-02 04:36:36

这个家伙有另一种处理write to the NSOutputStream的方法,他的问题听起来和你的相似。问题是他的应用程序停滞了,在[outputStream write:[data bytes] maxLength:[data length]]行上什么也没有发生;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17337415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档