So... sorry, hat was länger gedauert, aber hier ist der Quelltext:
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
  /* Erstellt Verbindung */
#define SERVER_PORT 80
int main( int argc, char ** argv )
{
  long x = 5;
  struct hostent * hostent;
  struct sockaddr_in servaddr;
  int sockfd;
  char Command[8192];
  char Buffer[1024];
  
  if( argc > 1 )
  { 
    hostent = gethostbyname( argv[1] );
  
    printf("Name    : %s\n", hostent->h_name );
    printf("Addr    : %d.%d.%d.%d\n", 
              (unsigned char) hostent->h_addr_list[0][0],
              (unsigned char) hostent->h_addr_list[0][1],
              (unsigned char) hostent->h_addr_list[0][2],
              (unsigned char) hostent->h_addr_list[0][3] );
  }
  else
  { 
    printf("zuwenig Argumente\n");
    exit(0);
  }
  if( (sockfd = socket( PF_INET, SOCK_STREAM, 0 )) == -1 )
  {
    printf("Socket konnte nicht geoeffnet werden\n");
    exit(0);
  }
  else
  {
    printf("Socket wurde geoeffnet\n");
    servaddr.sin_family = AF_INET;
    servaddr.sin_port   = htons( SERVER_PORT );
    servaddr.sin_addr   = * (struct in_addr*)hostent->h_addr_list[0];   // Erste Adresse einkopieren
    
    if( connect( sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr) ) == -1 )
    {
      printf("Verbindung konnte nicht erstellt werden\n");
      exit(0);
    }
    
    printf("Verbindung besteht.\n");
  }
  sprintf(Command, "GET http://%s%s HTTP/1.0\n"
                   "Host : %d.%d.%d.%d:%s\n"
                   "Connection: Keep alive\n\n", 
                   argv[1],
                   (argv[2]) ? argv[2]
                             : "/",
                   (unsigned char) hostent->h_addr_list[0][0],
                   (unsigned char) hostent->h_addr_list[0][1],
                   (unsigned char) hostent->h_addr_list[0][2],
                   (unsigned char) hostent->h_addr_list[0][3],
                   (argv[2]) ? (argv[3])
                               ? argv[3]
                               : "80"
                             : "80" );
    
  printf("Request: %s\n", Command);
    
  write( sockfd, &Command, sizeof( Command ) );
    
  while( x = read(sockfd, &Buffer, 1024 ) )
  {
    printf("%s\n", Buffer);
  }
     
  close( sockfd );
}
Kompiliert mit gcc client.c:
Code: Alles auswählen
xin@trinity:/virt/home/xin/tutorium/server$ ./a.out proggen.org
Name    : proggen.org
Addr    : 188.40.193.143
Socket wurde geoeffnet
Verbindung besteht.
Request: GET http://proggen.org/ HTTP/1.0
Host : 188.40.193.143:80
Connection: Keep alive
HTTP/1.1 301 Moved Permanently
Date: Sat, 24 Sep 2011 13:56:12 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.3-7+squeeze3
Location: http://www.proggen.org/doku.php
Connection: close
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html
Das ganze ist ein Testprogramm, nicht zwangsläufig eine Musterimplementierung!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.