---------- Forwarded message ---------- From: Frank Gerlach frankgerlach@gmail.com Date: Mar 7, 2007 1:53 PM Subject: Re: C und Netzwerkprog To: kai-micael.preiss@tu-dresden.de
On 3/7/07, Kai-Micael Preiß preiss@ifl.tu-dresden.de wrote:
Du meinst dieses, nehme ich an:
http://www.amazon.de/Unix-Network-Programming-Addison-Wesley-Professional/dp /0131411551/ref=sr_1_1/303-7926172-9919438?ie=UTF8&s=books-intl-de&qid=11732
65945&sr=8-1 ?
Exakt.
Hier die URL zu den Beispielprogrammen:
http://www.kohala.com/start/unpv12e/unpv12e.tar.gz
Das erste Programm aus diesem Buch , leicht modifiziert:
#include <sys/types.h> #include <sys/socket.h> #include <unistd.h>
#include <pthread.h> #include <sys/types.h>
#include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <unistd.h>
#define MAXLINE 80
int main(int argc, char **argv) { int sockfd, n;
char recvline[MAXLINE + 1]; struct sockaddr_in servaddr;
if (argc != 2) printf("usage: a.out <IPaddress>\n");
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) printf("socket error\n");
bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(25);//25 ist SMTP if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) printf("inet_pton error for %s", argv[1]);
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
printf("connect error\n");
while ( (n = read(sockfd, recvline, MAXLINE)) > 0) { recvline[n] = 0; /* null terminate */ printf("%s",recvline);
} if (n < 0) printf("read error\n");
exit(0); }
Aufruf mit ./xx 212.89.98.3
Es gibt dann die Begruessungsmeldung eines Servers aus.
Noch ein Tipp zum Thema C++:
Ich wuerde funktionen wie connect() und close() nicht kapseln. Es macht allerdings eine Menge Sinn, eine Klasse zu schreiben, die read() und write() kapselt, denn man wird aus Performancegruenden wohl nicht fuer jedes byte einen read()/write() Aufruf machen wollen, sondern einen Puffer dazwischenschalten. Diese Klasse kann ausserdem auch das Timeouthandling (exception werfen im Falle eines Timeouts) enthalten.
Wahrscheinlich gibt es schon eine ganze Menge FOSS-Frameworks, die diese Funktion schon anbieten. Ich habe mir es selbstgestrickt....
Gruss
Frank
On Wed, March 7, 2007 13:58, Frank Gerlach wrote:
Noch ein Tipp zum Thema C++:
Ich wuerde funktionen wie connect() und close() nicht kapseln. Es macht allerdings eine Menge Sinn, eine Klasse zu schreiben, die read() und write() kapselt, denn man wird aus Performancegruenden wohl nicht fuer jedes byte einen read()/write() Aufruf machen wollen, sondern einen Puffer dazwischenschalten. Diese Klasse kann ausserdem auch das Timeouthandling (exception werfen im Falle eines Timeouts) enthalten.
Bitte die ganze Socket in eine Klasse packen. Nur einzelne Funktionen zu kapseln macht die ganze schoene Objektorientierung zunichte.
Wahrscheinlich gibt es schon eine ganze Menge FOSS-Frameworks, die diese Funktion schon anbieten.
Jupp, die gibt es. So ziemlich JEDES Framework hat eine Socket-Klasse.
Konrad
lug-dd@mailman.schlittermann.de