tags:

views:

456

answers:

1

Hi, for a little project I have to do the following task on my IPhone:

  • open a TCP socket
  • send a command to the server
  • shutdown the WRITE part of the connection
  • read the response from the server
  • close the connection

I'm not experienced with socket programming - I've just started with network programming and I've already used the CFStream interface. But obviously streams are not adequate for this task.

Who can point me in the right direction? I tried to find a tutorial on Apples website about sockets, but there is nothing. Regards, Thomas

A: 

I'm not an iPhone developer, but I was curious about your question so I had a look around.

I found this page: Sockets on iPhone

Here's the code:

- (void)sendcmd:(NSString*)cmd {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *hostname= [defaults stringForKey:@"hostname"];

    NSHost *host=[NSHost hostWithName:hostname];

    if (host) {

        struct sockaddr_in addr;
        int sockfd;

        // Create a socket
        sockfd = socket( AF_INET, SOCK_STREAM, 0 );

        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = inet_addr([[host address] UTF8String]);
        addr.sin_port = htons( 2001 );

        int conn = connect(sockfd, &addr, sizeof(addr)); 

        if (!conn) {

            NSData* data = [cmd dataUsingEncoding:NSISOLatin1StringEncoding];

            ssize_t datasend = send(sockfd, [data bytes], [data length], 0);
            datasend++;

            //ssize_t   send(int, const void *, size_t, int) __DARWIN_ALIAS_C(send);

            close(sockfd);

        } else {
            // create a popup here!

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Connection failed to host " stringByAppendingString:hostname] message:@"Please check the hostname in the preferences." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
        }

    } else {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[@"Could not look up host " stringByAppendingString:hostname] message:@"Please check the hostname in the preferences." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }

}

A poster goes on to also suggest this library: entropydb - SocketWrapper

Codesleuth
Thanks for your support - SocketWrapper is on my level ;-) Yesterday a read a nice tutorial http://beej.us/guide/bgnet/output/html/multipage/index.html and now may things are clear.
Thomas M