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