尝试将ipod touch连接到我的服务器时网络超时

时间:2010-06-03 22:13:12

标签: c++ networking iphone-sdk-3.0 connection-timeout

我有一个ipod touch程序,它应该从我的mac上的服务器程序接收消息。为了确保触摸可以从mac以外的计算机接收消息,我用C ++对服务器进行了编程。如果我在同一台计算机上运行服务器和ipod应用程序(在模拟器上运行的应用程序),连接正常,一切都很花哨。但是,当我尝试从我的设备连接到服务器时,连接超时。谁能发现问题?我对网络和iPhone OS一般不太好。

server.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),而不是超时。

如果有人能帮助我,非常感谢!

1 个答案:

答案 0 :(得分:0)

iPod已连接到与我的Mac不同的网络,这就是它被阻止的原因。当我连接到同一个网络时,它可以正常工作。