0

私は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
4

2 に答える 2

1

おそらくファイアウォール関連のエラーです。パブリック IP をホストに転送しますか? ファイアウォールでポートを開いていますか。サーバーへの接続を試みる前に、動作することがわかっているパブリック IP への接続をテストします。

必要なもの:

ルーターのレベルに応じて、この用語はポート フォワーディング、仮想 IP、または静的 NAT 変換になります (他にもいくつかありますが、理解できます)。

Android バージョンが動作している場合は、問題の原因が他にある可能性があります。Ray Wenderlich は、ストリーム アプリの実装方法の良い例を示しています。Wiresharkを使用してネットワーク上で実際に渡されているものを分析し、さらに分析したり、ルーターのログを調べたりすることができます。AndroidはパブリックIPで動作すると言うので、よくわかりません

于 2013-06-27T07:45:51.523 に答える
0

この男は、NSOutputStream への書き込みを処理する別のアプローチを持っています。彼の問題はあなたの問題に似ています。問題は、彼のアプリが停止し、回線上で何も起こらないこと[outputStream write:[data bytes] maxLength:[data length]]です。

于 2013-07-01T20:36:36.410 に答える