关闭套接字的问题

时间:2010-05-21 17:26:46

标签: iphone objective-c sockets

我的套接字程序有问题。 我创建了客户端程序(我的代码如下) 使用disconnect方法关闭套接字时出现问题。

    CFSocketRef s;


        -(void)CreaConnessione
        {
            CFSocketError errore;

            struct sockaddr_in sin;

            CFDataRef address;
            CFRunLoopSourceRef source;

            CFSocketContext context = { 0, self, NULL, NULL, NULL };

            s = CFSocketCreate(
                               NULL, 
                               PF_INET,
                               SOCK_STREAM, 
                               IPPROTO_TCP, 
                               kCFSocketDataCallBack, 
                               AcceptDataCallback, 
                               &context);

            memset(&sin, 0, sizeof(sin));

            int port = [fieldPorta.text intValue];
            NSString *tempIp = fieldIndirizzo.text;
            const char *ip = [tempIp UTF8String];

            sin.sin_family = AF_INET;
            sin.sin_port = htons(port);
            sin.sin_addr.s_addr = (long)inet_addr(ip);

            address = CFDataCreate(NULL, (UInt8 *)&sin, sizeof(sin));
            errore = CFSocketConnectToAddress(s, address, 0);

            if(errore == 0){
                buttonInvioMess.enabled = TRUE;
                fieldMessaggioInvio.enabled = TRUE;

                labelTemp.text = [NSString stringWithFormat:@"Connesso al Server"];

                CFRelease(address);

                source = CFSocketCreateRunLoopSource(NULL, s, 0);
                CFRunLoopAddSource(CFRunLoopGetCurrent(), 
                                   source, 
                                   kCFRunLoopDefaultMode);

                CFRelease(source);
                CFRunLoopRun();
            }

            else{
                labelTemp.text = [NSString stringWithFormat:@"Errore di connessione. Verificare Ip e Porta"];
                switchConnection.on = FALSE; 
            }

        }



        //the socket doesn't disconnect
-(void)Disconnetti{

            CFSocketInvalidate(s);
            CFRelease(s);
        }


        -(IBAction)Connetti
        {
            if(switchConnection.on)
                [self   CreaConnessione];
            else
                [self   Disconnetti];

        }

1 个答案:

答案 0 :(得分:0)

如果您尝试重用已失效的套接字。我想你不能再使用相同的套接字对象了。

因为我从代码中删除了无效的套接字。断开连接后我尝试建立连接时,代码的效果非常好。