Hi, ich habe folgendes vor und komme nicht weiter:
Ich will von meinem PC über ein eingerichteten netzwerk-Drucker drucken...
An sich nicht all zu schwer, nur dass der Drucker keiner ist, sondern ein weiterer PC im netzwerk.
ich habe also ersteinmal mit netcat gestet ( auf dem 'druck-pc' gestartet und von da alles ankommende in eine datei geschrieben). ging hervorragend.
Einziges Problem, nachdem netcat einen druckauftrag erhalten hat, schreibt er es in eine datei und beendet die sitzung...
Ausserdem war das mit netcat ja nur zu testzwecken.
Ich habe mir also einen TCP-Echo-Server gebaut/geholt und schreibe dort nun die empfangenen daten in eine datei.
leider jedoch nicht die richtigen... wenn der server läuft und einen druckauftrag bekommt, merkt er es zwar, aber er schreibt nur den namen des senders in die datei...
wie kann ich es lösen, dass der inhalt des dokuments (drucker ist als postscript drucker eingerichtet) in die datei schreibt?
anbei mal mein code für den server...
Alles anzeigen
ich hoffe jemand kann mir bei meinem problem weiter helfen...
vielen dank schonma
mfg
meneke
Ich will von meinem PC über ein eingerichteten netzwerk-Drucker drucken...
An sich nicht all zu schwer, nur dass der Drucker keiner ist, sondern ein weiterer PC im netzwerk.
ich habe also ersteinmal mit netcat gestet ( auf dem 'druck-pc' gestartet und von da alles ankommende in eine datei geschrieben). ging hervorragend.
Einziges Problem, nachdem netcat einen druckauftrag erhalten hat, schreibt er es in eine datei und beendet die sitzung...
Ausserdem war das mit netcat ja nur zu testzwecken.
Ich habe mir also einen TCP-Echo-Server gebaut/geholt und schreibe dort nun die empfangenen daten in eine datei.
leider jedoch nicht die richtigen... wenn der server läuft und einen druckauftrag bekommt, merkt er es zwar, aber er schreibt nur den namen des senders in die datei...
wie kann ich es lösen, dass der inhalt des dokuments (drucker ist als postscript drucker eingerichtet) in die datei schreibt?
anbei mal mein code für den server...
Quellcode
- #include<sys/types.h>
- #include<sys/socket.h>
- #include<stdio.h>
- #include<unistd.h>
- #include<string.h>
- #include<netinet/in.h>
- #define SERVER_PORT 515 /* Ein Port der auch von 'gewöhnlichen' Benutzern verwendet werden darf */
- #define MSG_SIZE 10000 /* Die maximale Anzahl an Zeichen, die 'msg' enhalten darf */
- FILE *fp;
- char pfad[100];
- char hilfe[50];
- int main(int argc, char **argv){
- strcpy(pfad, "/home/xdavid/TCP/empfangen.ps");
- int fromsocket; /* Socket, der auf ankommende Anfragen wartet */
- int client; /* Socket für die Kommunikation mit einem Client */
- struct sockaddr_in fromaddr; /* Adresse die 'belauscht' werden soll */
- char msg[MSG_SIZE]; /* der Buffer für die Nachrichten */
- int bytes; /* hier wird die Anzahl der gelesenen Bytes gespeichert */
- printf("%s: server is up and running ...\n", argv[0]);
- /* Socket erzeugen; verbindungsorientiert mit TCP */
- fromsocket = socket(PF_INET,SOCK_STREAM,0);
- if(fromsocket == -1){
- fprintf(stderr, "%s: cannot open socket\n", argv[0]);
- exit(1);
- }
- /* Adresse zum 'Lauschen' definieren */
- fromaddr.sin_family = PF_INET;
- fromaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* eine Anfrage kann von jeder IPAdresse kommen */
- fromaddr.sin_port = htons(SERVER_PORT);
- /* Socket an die Adresse und den Port binden */
- if(bind(fromsocket, (struct sockaddr *)&fromaddr, sizeof(fromaddr)) == -1){
- fprintf(stderr, "%s: cannot bind socket\n", argv[0]);
- exit(1);
- }
- /* Socket 'horchen' lassen; die maximale Länge der Warteschlange wird auf 3 gesetzt */
- if(listen(fromsocket, 3) == -1){
- fprintf(stderr, "%s: unable to listen\n", argv[0]);
- exit(1);
- }
- /* Auf Anfragen warten */
- for(; ; ){ /* Endlosschleife; "forever" */
- /* Socket für ankommende Anfrage erzeugen */
- if((client = accept(fromsocket, NULL, NULL)) == -1){
- fprintf(stderr, "%s: error while receiving request\n", argv[0]);
- exit(1);
- }
- /* Nachricht vom Client lesen */
- if((bytes = recv(client, msg, sizeof(msg), 0)) == -1){
- fprintf(stderr, "%s: error while receiving reply\n", argv[0]); exit(1);
- }
- if ((fp = fopen(pfad,"w"))==NULL)
- {printf("\n Fehler beim Öffnen der Datei\n"); }
- /* es handelt sich um einen String, also darf man das abschließende '\0'
- nicht vergessen */
- msg[bytes] = '\0';
- printf("%f\n", fp);
- fprintf(fp,"%s\n",msg);
- fclose(fp);
- printf("%s: received request from '%s'\n", argv[0], msg);
- /* den Client-Socket freigeben */
- close(client);
- }
- return 0;
- }
ich hoffe jemand kann mir bei meinem problem weiter helfen...
vielen dank schonma
mfg
meneke