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.
|