2012-04-28 2 views
3

TCP 스트림을 열어 코코아 응용 프로그램이있는 장치와 통신하려고합니다. 웹을 검색 한 결과 일부 가능성이 있다는 것을 알았지 만 조금 갇혔습니다. TCP/IP를 사용하여 장치에 말하기

은 내가 NSStream 방법을 사용하기로 결정 (이 코코아 터치에서 참조 있기 때문에, 내가 포트에 원하는 경우 유용 할 것이다 내가 가정 아이폰에 내 응용 프로그램), 그래서 여기에 내 코드입니다 : 그래서

@implementation AppDelegate 

- (IBAction)connect:(id)sender { 

    [NSStream getStreamsToHost:"192.168.1.4" port:23 inputStream:&inputStream outputStream:&outputStream]; 

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

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

    [inputStream open]; 
    [outputStream open]; 
} 

// Both streams call this when events happen 
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode 
{ 
    if (aStream == inputStream) { 
     [self handleInputStreamEvent:eventCode]; 
    } else if (aStream == outputStream) { 
     [self handleOutputStreamEvent:eventCode]; 
    } 
} 

- (void)handleInputStreamEvent:(NSStreamEvent)eventCode 
{ 
    switch (eventCode) { 
     case NSStreamEventHasBytesAvailable:[self readBytes]; 
      break; 
     case NSStreamEventOpenCompleted: 
      // Do Something 
      break; 
     default: 
     case NSStreamEventErrorOccurred: 
      NSLog(@"An error occurred on the input stream."); 
      break; 
    } 

} 

, 내 연결 단추를 클릭하면 내 호스트에 스트림을 열고 내 2 개체 (입력 스트림 및 출력 스트림)를 작성해야합니다.

첫 번째 단계는 NSTextView에 inputStream을 넣는 것입니다. 호스트에 도달했는지 아닌지 알지만 ... 여전히 붙어 있습니다. (

누군가 내 길을 비출 수 있다면 좋을 것입니다! 나는 Stack Overflow에 대해 새로운데, 내가 많이 알고있는 일요일에 커뮤니티를 도울 수있어서 기쁩니다! :)


내 코드를 업데이트하고 빛이 천천히오고 있지만오고있어 보인다 :) 나는 텔넷 서버로 스트림을했다. 나는 texview에서 "안녕하세요"를 얻었습니다. 지금, 나는 여기 서버에 명령을 보낼 수 있도록 사용자에게 & 비밀번호를 보내 좋아하지만 할 것은 내 "보내 사용자 & 패스"버튼 코드 :

- (IBAction)sendusername:(id)sender { 

    NSString * usernameMsg = [NSString stringWithFormat:@"user @", [usernameField stringValue]]; 
    NSData * usertosend = [[NSData alloc] initWithData:[usernameMsg dataUsingEncoding:NSUTF8StringEncoding]]; 
    [outputStream write:[usertosend bytes] maxLength:[usertosend length]]; 

} 

내 검색 수에 따라, 서버가 응답해야 내게 "user + ok"와 같은 것. 그러나 아무 것도 ... 2 stranges things : - SSH 서버의 FTP 서버에 소켓을 열면, 문제없이 항상 "hello"응답을했습니다. 하지만 telnet에서 연결의 90 %가 다음과 같이 이상한 여정에 응답합니다. "ÿyÿýÿûÿû", 왜?

  • 내가 사용자를 보내

    는 아무것도
+0

이렇게하면 어떻게됩니까? 그리고 당신은 192.168.1.4 (왜 하드 코딩 했습니까?)가 포트 23에서 수신 대기하고 있는지 확인 했습니까? –

+0

192.168.1.4가 포트 23 (텔넷)에서 수신 대기 중입니다. 나는 터미널에서 그것을 도달 할 수있다. 오류가 항목에서 오지 않았는지 확인하기 위해 주소를 하드 코딩했습니다. 내가이 일을 할 때 아무 일도 일어나지 않는다. 로그에서 뭔가를 볼 수는 있지만 아무것도 없다./ –

+0

여전히 검은 색으로 NSStream에 대한 좋은 구성을 찾을 수없고 서버에서 응답 할 수 없다. : –

답변

0

난 당신이 https://github.com/robbiehanson/CocoaAsyncSocket/, BSD 소켓을위한 좋은 목표 - C 래퍼를보고 제안 할 수 ...의 handleEvent에서, 만 unrocognized 이벤트를 발생하지 않습니다. 멋지고 깨끗한 콜백 방식으로 이벤트 루프에서 보내기 - 수신 상호 작용을 처리 할 수 ​​있습니다 (사용자 정의 "메시지 종료"기호를 처리하여 수신 한 항목을 결합 및 분할하는 대신 실제 패킷 처리에 더 집중할 수 있습니다) 와이어로부터).

관련 문제