2009-11-24 3 views
0

간단한 클라이언트 - 서버 응용 프로그램에서 AsyncSocket 클래스를 사용하고 있습니다. 첫 번째 단계로 저는 클라이언트와 서버 사이에 연결이 설정 되 자마자 클라이언트가 "xyz 서버에 연결되었습니다"라는 환영 메시지를 서버에 보내고 서버는이를 텍스트보기로 표시합니다.AsyncSocket 사용 중에 클라이언트 측 응용 프로그램이 의도 한대로 작동하지 않습니다.

//The code in ClientController class is: 

-(void)awakeFromNib{ 
NSError *error = nil; 
    if (![connectSocket connectToHost:@"192.168.0.32" onPort:25242 error:&error]) { 
    NSLog(@"Error starting client: %@", error); 
    return; 
    } 

    NSLog(@"xyz chat client started on port %hu",[connectSocket localPort]); 
} 
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ 
       [sock writeData:[@"connected to xyz server" dataUsingEncoding:NSUTF8StringEncoding] withTimeout:30.0 tag:0]; 
} 
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 
       // some relevant code goes here 
} 
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag{ 
       NSLog(@"within didWriteDataWithTag:"); // getting this message, means it should have written something to remote socket but 
    // delegate- onSocket:didReadData:withTag: at server side is not getting invoked 
} 

// The code in ServerController class is: 

- (IBAction)startStop:(id)sender{ 
NSLog(@"startStopAction"); 
if(!isRunning) 
{ 
    NSError *error = nil; 
    if(![listenSocket acceptOnPort:INPUT_PORT error:&error]) 
    { 
    NSLog(@"Error starting server: %@", error); 
    return; 
    } 

    NSLog(@"Echo server started on port %hu",[listenSocket localPort]); 
    isRunning = YES; 

    [sender setTitle:@"Stop"]; 
} 
else 
{ 
    // Stop accepting connections 
    [listenSocket disconnect]; 

    // Stop any client connections 
    int i; 
    for(i = 0; i < [connectedSockets count]; i++) 
    { 
    // Call disconnect on the socket, 
    // which will invoke the onSocketDidDisconnect: method, 
    // which will remove the socket from the list. 
    [[connectedSockets objectAtIndex:i] disconnect]; 
    } 

    NSLog(@"Stopped Echo server"); 
    isRunning = false; 

    [sender setTitle:@"Start"]; 
} 
} 
- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket{ 
[connectedSockets addObject:newSocket]; 
} 
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{ 
NSLog(@"Accepted client %@:%hu", host, port); // it is getting displayed 
[sock readDataToData:[AsyncSocket CRLFData] withTimeout:READ_TIMEOUT tag:0]; 
} 
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{ 
     NSString *msgReceived = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 
NSLog(@"msgReceived in didReadData- %@",msgReceived); // it is not getting displayed 
     [outputView insertText:msgReceived]; 
     [sock readDataToData:[AsyncSocket CRLFData] withTimeout:READ_TIMEOUT tag:0]; 
} 

누구든지 나를 잘못 생각할 수 있습니까? 미리 감사드립니다 ... Miraaj

답변

0

문제가 해결됨 : 방금 사용 : [sock readDataWithTimeout : READ_TIMEOUT tag : 0]; 대신에 : [sock readDataToData : [AsyncSocket CRLFData] withTimeout : READ_TIMEOUT tag : 0];