非常奇怪的iPhone - 服务器问题

时间:2010-02-03 20:49:20

标签: iphone cocoa-touch sockets core-foundation

基本上我是从iPhone应用程序向Java套接字服务器发送数据但是发生了一些相当奇怪的事情,它在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);

非常感谢任何帮助!

提前致谢,
奥奇

2 个答案:

答案 0 :(得分:0)

您对CFSocketSendData的调用是否在(阻塞的)GUI线程上完成?

我会尝试在performSelectorInBackground /或延迟组合之后包装这3行。

答案 1 :(得分:0)

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