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.