(분명히) FTP 연결을 관리하지만 그로부터 아무것도 읽지 못하고 좋은 이유가 있습니다. 연결이 시간 초과 될 때까지 읽기에 도달하지 못합니다.코코아 FTP 연결에서 NSInputStream을 읽습니다.
헤더 :
NSInputStream *iStream;
NSOutputStream *oStream;
구현 :
내가 이것을 사용 eventhandling를 들어 NSHost *host = [NSHost hostWithAddress:@"127.0.0.1"];
[iStream open]; // SOLUTION changes
[NSStream getStreamsToHost:host port:3333 inputStream:&iStream outputStream:&oStream];
NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:1];
[settings setObject:(NSString *)NSStreamSocketSecurityLevelTLSv1 forKey:(NSString *)kCFStreamSSLLevel];
[settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];
[settings setObject:@"127.0.0.1" forKey:(NSString *)kCFStreamSSLPeerName];
/*[iStream retain];
[iStream setDelegate:self];
[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
CFReadStreamSetProperty((CFReadStreamRef)iStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
[iStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];*/
//[iStream open]; SOLUTION changes: moved up
, http://www.cocoadev.com/index.pl?NSStream에 따라 : 나는했습니다
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
if (aStream == iStream) {
[self handleInputStreamEvent:eventCode];
} else if (aStream == oStream) {
[self handleOutputStreamEvent:eventCode];
}
}
- (void)handleInputStreamEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
// SOLUTION changes: new inputstream handler
case NSStreamEventHasBytesAvailable:
if(!_data) {
_data = [[NSMutableData data] retain];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)iStream read:buf maxLength:1024];
if(len) {
[_data appendBytes:(const void *)buf length:len];
[bytesRead setIntValue:[bytesRead intValue]+len];
}
[self readBytes];
break;
case NSStreamEventOpenCompleted:
NSLog(@"NSStreamEventOpenCompleted");
break;
case NSStreamEventEndEncountered:
NSLog(@"NSStreamEventEndEncountered");
break;
case NSStreamEventErrorOccurred:
NSLog(@"An error occurred on the input stream.");
break;
}
}
여기
내 코드입니다 최소로 유지하기 위해이 게시물에서 oStream 설정을 생략했습니다.아직 FTP로 전환하라는 요청을 보내지 않았습니다.
Xcode가 디버깅을 위해 매우 끔찍한 것을 발견하면 도움을 주실 수 있습니다. (실패한 단계에 대해서는 예외 또는 오류 메시지가 있습니다.)
- 척
링크를 제공해 주셔서 감사합니다. xcode에 대한 공격과 비슷한 것으로 보이는 유효 지점. 그러나 내가 읽은 경우에만 내 폴링 믹스가 있습니다. 의심의 여지가 실수이며, 내가 그것을 제거했습니다, 나는 아직도 스트림이 사용할 수있는 바이트를 가지고 응답을받지 않습니다. 서버 측에서 연결되는 것을 볼 수 있고 서버가 "220"(ftp) hello 메시지를 보내는 것처럼 연결이 이루어 졌는지 확인할 수 있습니다. – James
- (void) stream : (NSStream *) aStream 핸들 이벤트 : (NSStreamEvent) eventCode { if (aStream == iStream) { [self handleInputStreamEvent : eventCode]; } else if (aStream == oStream) { [self handleOutputStreamEvent : eventCode]; }} - (무효) handleInputStreamEvent (NSStreamEvent)이 { 스위치 (EVENTCODE) { 경우 EVENTCODE NSStreamEventHasBytesAvailable : [자체의 readBytes]; 휴식; } } 은 스트림 이벤트를 처리하도록 설정 한 것입니다. – James
관련 코드가있는 원래 게시물을 업데이트하는 것이 가장 좋습니다. 댓글에서 코드 형식이 지정되지 않았습니다. 명확하게하기 위해 원래 질문의 코드 목록을 확실히 업데이트해야합니다. –