2010-05-21 129 views
1

我的套接字程序有問題。 我創建客戶端程序(我的代碼如下) 我有一個問題,當我關閉與斷開方法的套接字。關閉插座問題

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]; 

     } 
+2

究竟是什麼問題?你怎麼知道socket沒有關閉? – 2010-05-21 17:33:40

+0

當我在「Disconnetti」之後用服務器發送消息時,客戶端接受此消息並且這是不正確的情況 – zp26 2010-05-22 08:53:55

+0

有兩種套接字關閉,一種是關閉的,另一種在寫入後關閉。嘗試另一種方式來做到這一點。 – Tattat 2011-07-03 15:27:09

回答

0

如果您試圖重複使用已失效的套接字。我想你不能再次使用相同的套接字對象。

因爲一旦我從我的代碼中刪除無效套接字。代碼在每次嘗試斷開連接後都可以正常工作。