Krunal Krunal - 7 months ago 56
Objective-C Question

iOS send data using socket connection

I have implemented socket connection in iOS.

What I want to do is to send string of data to the connected device...
(I am able to receive data when someone sends to my device)
I have tried this code but data is getting received on other device, when I close my app.

- (IBAction)connectToServer:(id)sender {

NSLog(@"Setting up connection to %@ : %i", _ipAddressText.text, [_portText.text intValue]);
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef) _ipAddressText.text, [_portText.text intValue], &readStream, &writeStream);

messages = [[NSMutableArray alloc] init];

[self open];

- (void)open {

NSLog(@"Opening streams.");

outputStream = (__bridge NSOutputStream *)writeStream;
inputStream = (__bridge NSInputStream *)readStream;

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

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

[outputStream open];
[inputStream open];

_connectedLabel.text = @"Connected";

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

NSLog(@"stream event %lu", streamEvent);

switch (streamEvent) {

case NSStreamEventOpenCompleted:
NSLog(@"Stream opened");
_connectedLabel.text = @"Connected";

case NSStreamEventHasBytesAvailable:
if (theStream == inputStream)
uint8_t buffer[1024];
NSInteger len;

while ([inputStream hasBytesAvailable])
len = [inputStream read:buffer maxLength:sizeof(buffer)];
if (len > 0)
NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

if (nil != output)
NSLog(@"server said: %@", output);
[self messageReceived:output];

case NSStreamEventHasSpaceAvailable:
NSLog(@"Stream has space available now");

case NSStreamEventErrorOccurred:
NSLog(@"error: %@",[theStream streamError].localizedDescription);

case NSStreamEventEndEncountered:
[theStream close];
[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
_connectedLabel.text = @"Disconnected";
NSLog(@"close stream");

NSLog(@"Unknown event");

/* Sends data to other device */
- (IBAction) sendMessage {

NSString *response = [NSString stringWithFormat:@"msg:%@", _dataToSendText.text];
NSData *data = [[NSData alloc] initWithData:[response dataUsingEncoding:NSASCIIStringEncoding]];
NSLog(@"[data length] %lu",(unsigned long)[data length]);
[outputStream write:[data bytes] maxLength:[data length]];


Where I am making mistake?


After doing hard research i found adding \n at the end of string message indicates my buffer has received whole string. now start sending a file, so it worked...