2013-11-27 2 views

답변

-2

수 없습니다. 기기의 IP 변경 (둘 다 다른 네트워크로 이동)이 발생하면 어떻게 될까요?

+0

을 할 수 있습니다 중앙 서버 물론 –

+0

하지만, 다음, 그것은 두 개의 서버 피어 - 투 - 피어의 아니에요과 - 클라이언트 연결. –

+0

서버가 사용자 주소를 보내고 나서 피어 투 피어 –

0

은 클래스 속성 정의이 시도 할 수 있습니다 : 당신의 스트림을 초기화

NSInputStream *inputStream; 
NSOutputStream *outputStream; 

CFReadStreamRef readStream; 
CFWriteStreamRef writeStream; 

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)kScannerIP, kScannerPort, &readStream, &writeStream); 
inputStream = (__bridge NSInputStream *)readStream; 
outputStream = (__bridge NSOutputStream *)writeStream; 

[inputStream setDelegate:self]; 
[outputStream setDelegate:self]; 

[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

[inputStream open]; 
[outputStream open]; 
- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { 
    switch (streamEvent) { 
     case NSStreamEventOpenCompleted: 
      break; 

     case NSStreamEventHasBytesAvailable: 
      break; 

     case NSStreamEventHasSpaceAvailable: 
      break; 

     case NSStreamEventErrorOccurred: 
      break; 

     case NSStreamEventEndEncountered: 
      break; 

     default: 
      NSLog(@"Unknown event"); 
    } 
} 

네트워크 마지막으로 닫기 :들어오는 데이터를 처리하기 위해 대리자 메서드를 구현

[inputStream close]; 
[outputStream close]; 
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
inputStream = nil; 
outputStream = nil; 
+0

@ 접근 방식은 호스트와 포트로 연결해야합니다. 내 질문은 "다른 아이폰에서 내 응용 프로그램을 사용하여 특정 사용자에게 연결하는 방법"입니다. 해당 사용자에 대해 호스트 및 포트를 얻는 방법을 의미합니까? –

+0

사용자와 그의 IP를 아는 자신의 서버를 통해. 이 경우 사용자가 호스트가됩니다. 사용자와 ips를 추적해야합니다. 또는 정적 ips로 그 작업을 원하십니까? 그게 불가능하다고 생각해. – thorb65