0
我有一個ipod touch程序,應該可以從我的mac上的服務器程序接收消息。爲了確保觸摸可以接收來自Mac以外的計算機的消息,我使用C++對服務器進行了編程。如果我在同一臺計算機上運行服務器和ipod應用程序(在模擬器上運行的應用程序),連接就沒有問題,並且一切都很花哨。但是,當我嘗試從我的設備連接到服務器時,連接超時。任何人都可以發現問題嗎?一般來說,我不太擅長網絡和iPhone OS。嘗試將ipod touch連接到我的服務器時,網絡超時
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;
}
服務器卡在接受(),等待應用程序...
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進行檢查)。
如果有人能幫助我,非常感謝!