我是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版本正在运行,可能是其他原因导致了问题。Ray Wenderlich有一个很好的例子来说明如何实现流应用程序。您可以使用wireshark分析网络上实际传递的内容,以进行进一步分析,还可以查看路由器日志。我不确定,因为你说android与公共ip 一起工作
这家伙有另一种处理NSOutputStream写入的方法。他的问题听起来和你的类似。问题是他的应用程序停了下来,[outputStream write:[data bytes] maxLength:[data length]]
线上什么也没发生;