Question

I'm having trouble connecting to a Java socket server. I know the server is working because I connect via a Java socket. I'm using the CocoaAsyncSocket library to make a client connection from an iOS device. I've tried the following,

[socket connectToHost:@"XXX.XXX.X.XXX" onPort:9090 error:&err]

method but the server never sees the client connect and the client (CocoaAsyncSocket) thinks its connected. So thats no good, then I realized there was another connection method available.

So I'm thinking I should be using the connectToAddress method instead. I've used this post as a reference for my current code but I'm still getting an error and I'm not sure why. The only difference from my version and the suggested version is for the length they use sa_len and I was getting a error and xCode wanted to switch it to sin_len, so I did. I'm really new to direct socket connections so bear with me.

GCDAsyncSocket *socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];

struct sockaddr_in ip4addr;

ip4addr.sin_family = AF_INET;
ip4addr.sin_port = htons(9090);
inet_pton(AF_INET, "XXX.XXX.X.XXX", &ip4addr.sin_addr);

NSData *discoveryHost = [NSData dataWithBytes:&ip4addr length:ip4addr.sin_len];

NSError *err = nil;
if (![socket connectToAddress:discoveryHost error:&err])
{
    NSLog(@"I CANNOT CONNECT!");
}
else
{
    NSLog(@"IM CONNECTED!");
}

The connection fails and the error is,

Error Domain=GCDAsyncSocketErrorDomain Code=2 "A valid IPv4 or IPv6 address was not given" UserInfo=0x8bac880 {NSLocalizedDescription=A valid IPv4 or IPv6 address was not given}
Was it helpful?

Solution

I changed

NSData *discoveryHost = [NSData dataWithBytes:&ip4addr length:ip4addr.sin_len];

to

NSData *discoveryHost = [NSData dataWithBytes:&ip4addr length:sizeof(ip4addr)];

and it fixed that error I was getting. However, the reason I wasn't able to connect via the connectToHost method was due to my server socket code. I have two server sockets accepting connections. I commented out the second and it worked just fine. I'm guessing it was due to the thread being locked by the second socket or something.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top