Тайм-аут сети при попытке подключить iPod Touch к моему серверу - PullRequest
0 голосов
/ 04 июня 2010

У меня есть программа 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 голосов
/ 04 июня 2010

iPod был подключен к сети, отличной от моего Mac, и поэтому был заблокирован. Когда я подключен к той же сети, он работает отлично.

...