gpt4 book ai didi

ios - 使用公共(public) IP 时 CFStream 连接无法连接

转载 作者:行者123 更新时间:2023-11-29 03:48:46 27 4
gpt4 key购买 nike

我是 iOS 和 Objective c 的新手......在我的应用程序中,我正在使用 CFStream 建立到我的服务器的套接字连接..问题是当我使用本地 IP (192.168.10.246) 运行程序时,连接已建立,但是当我将其替换为公共(public) IP 时, View 会卡住并给出以下错误事件..

我目前正在模拟器上运行...

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];

我是否需要为公共(public)IP添加一些额外的代码...或者是网络连接中的某种防火墙问题或Xcode中的设置???请帮忙!!!

Edit:

我已附上wireshark日志:我的目标公共(public)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

最佳答案

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

您需要:

Depending on the level of your router this terminology will be Port Forwarding, Virtual IPs, or Static NAT Translation (there are a few others but you get the idea).

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

关于ios - 使用公共(public) IP 时 CFStream 连接无法连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com