2010-02-03 31 views
0

本質上我是從iPhone應用程序發送數據到Java套接字服務器,但有些奇怪的事情發生,它不會收到數據,直到iPhone應用程序關閉!我確信有一些我錯過了,但我似乎無法找到它,這都很奇怪。非常奇怪的iPhone - 服務器問題

這裏是我的連接是如何創建的:

-(CFSocketRef)initSocket { 
    CFSocketContext context = { 
     .version = 0, 
     .info = self, 
     .retain = NULL, 
     .release = NULL, 
     .copyDescription = NULL 
    }; 

    sockety = CFSocketCreate(
     kCFAllocatorDefault, 
     PF_INET, 
     SOCK_STREAM, 
     IPPROTO_TCP, 
     kCFSocketDataCallBack^kCFSocketConnectCallBack, 
     socketCallBack, 
     &context 
     ); 
    uint16_t port = 4444; 

    struct sockaddr_in addr4; 

    memset(&addr4, 0, sizeof(addr4)); 
    addr4.sin_family = AF_INET; 
    addr4.sin_len = sizeof(addr4); 
    addr4.sin_port = htons(port); 

    const char *ipaddress = "192.168.1.5"; 

    inet_aton(ipaddress, &addr4.sin_addr); 

    NSData *address = [NSData dataWithBytes:&addr4 length:sizeof(addr4)]; 

    CFSocketError error = CFSocketConnectToAddress(sockety, (CFDataRef)address, 1); 

    if(error != kCFSocketSuccess) 
    { 
     Faliure = YES; 
    } 
    else{ 
     ViewNo = 2; 
    } 
    CFRunLoopSourceRef source; 

    source = CFSocketCreateRunLoopSource(NULL, sockety, 1); 
    CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode); 
    CFRelease(source); 
    return sockety; 
} 

繼承人如何將消息發送:

const char *sendStrUTF = [sentmessage UTF8String]; 
NSData *dataOut = [NSData dataWithBytes: sendStrUTF length: strlen(sendStrUTF)]; 
CFSocketSendData(sockety, NULL, (CFDataRef) dataOut, 0); 

任何幫助將不勝感激!

由於提前,
奧茲

回答

0

是你CFSocketSendData呼叫正在上(阻止)GUI線程中完成的?

我會嘗試在performSelectorInBackground /或延遲組合後包裝這3行。

0
NSData *dat=[stringToSend dataUsingEncoding:NSASCIIStringEncoding]; 
CFSocketError w =CFSocketSendData(_socket, NULL,(CFDataRef)dat, 0); 
if (w==kCFSocketSuccess) { 
    NSLog(@"success"); 
}