[Assorted-commits] SF.net SVN: assorted: [650] sandbox/trunk/src/c/client.c
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-04-02 03:39:18
|
Revision: 650 http://assorted.svn.sourceforge.net/assorted/?rev=650&view=rev Author: yangzhang Date: 2008-04-01 20:39:21 -0700 (Tue, 01 Apr 2008) Log Message: ----------- added simple tcp client example Added Paths: ----------- sandbox/trunk/src/c/client.c Added: sandbox/trunk/src/c/client.c =================================================================== --- sandbox/trunk/src/c/client.c (rev 0) +++ sandbox/trunk/src/c/client.c 2008-04-02 03:39:21 UTC (rev 650) @@ -0,0 +1,63 @@ +#include <strings.h> +#include <sys/socket.h> +#include <arpa/inet.h> +#include <unistd.h> +#include <netinet/in.h> +#include <netdb.h> +#include <stdio.h> + +int +main() +{ + // Create socket. + int s = socket(AF_INET, SOCK_STREAM, 0); + if (s == 0) { + perror("socket"); + return 1; + } + + // Create remote socket address. + struct sockaddr_in sa; + bzero(&sa, sizeof sa); + sa.sin_family = AF_INET; + + // Use port number. + sa.sin_port = htons(80); + + // Look up by service name. + struct servent *sp = getservbyname("http", "tcp"); + if (sp == NULL) { + perror("getservbyname"); + return 1; + } + // getservbyname already returns the port in. + sa.sin_port = sp->s_port; + //printf("%d\n", sa.sin_port); + + // Use string IP address. + sa.sin_addr.s_addr = inet_addr("127.0.0.1"); + if (sa.sin_addr.s_addr == -1) { + perror("inet_addr"); + return 1; + } + + // Look up by hostname. + struct hostent *h = gethostbyname("www.google.com"); + if (h == NULL) { + perror("gethostbyname"); + return 1; + } + bcopy(h->h_addr, (char*) &sa.sin_addr, h->h_length); + + // Connect. + if (connect(s, (struct sockaddr*) &sa, sizeof sa) != 0) { + perror("connect"); + close(s); + return 1; + } + + // Close socket. + close(s); + + return 0; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |