Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

Monaj

macrumors regular
Original poster
May 24, 2009
193
0
Hi All,

I am using AsyncSocket class in a simple client-server application. As a first step I want that - as soon as connection is established between client and server, client transmit a welcome message - "connected to xyz server" to server and server displays it in textview.

Code:
//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];
}

Can anyone suggest me where I may be wrong??
Thanks in advance.......Mon@j
 
found solution

just used: [sock readDataWithTimeout:READ_TIMEOUT tag:0];
in place of: [sock readDataToData:[AsyncSocket CRLFData] withTimeout:READ_TIMEOUT tag:0]; :D
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.