0

Mac のサーバー プログラムからメッセージを受信する iPod touch プログラムがあります。touch が Mac 以外のコンピューターからメッセージを受信できるようにするために、サーバーを C++ でプログラミングしました。サーバーと ipod アプリの両方を同じコンピューター (シミュレーターで実行されているアプリ) で実行すると、接続は問題なく、すべてうまくいきます。ただし、デバイスからサーバーに接続しようとすると、接続がタイムアウトします。誰でも問題を見つけることができますか? 私はネットワークと iPhone OS 全般が苦手です。

サーバー.cpp:

sockfd = socket(PF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
    cout << "ERROR opening socket";
    return;
}

memset((char *)&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
    cout << "ERROR on binding";
    return;
}

listen(sockfd,5);
clilen = sizeof(cli_addr);

newsockfd = accept(sockfd,(struct sockaddr *) &cli_addr, (socklen_t*)&clilen);
if (newsockfd < 0) {
    cout << "ERROR on accept.";
    return;
}

サーバーはaccept()でスタックし、アプリを待っています...

client.m:

CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)hostName, portNum, &readStream, &writeStream);

if (readStream && writeStream) {
    NSLog(@"Starting streams");

    CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
    CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

    inputStream = (NSInputStream *)readStream;
    [inputStream retain];
    [inputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];

    outputStream = (NSOutputStream *)writeStream;
    [outputStream retain];
    [outputStream setDelegate:self];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream open];
}
if (readStream)
    CFRelease(readStream);

if (writeStream)
    CFRelease(writeStream);

私が知る限り、サーバーもクライアントもタイムアウト以外のエラーを報告していません (私は errno と NSError でチェックしています)。

誰かがこれで私を助けることができれば、どうもありがとう!

4

1 に答える 1

0

iPod が私の Mac とは別のネットワークに接続されていたため、ブロックされました。同じネットワークに接続すると、完全に正常に動作します。

于 2010-06-04T16:10:42.740 に答える