PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C] problem mit strings ( auch socket bezogen aber imho liegts net daran)



Freekazonid
21-06-2003, 14:41
hallo,

ich lerne grad ein bisserl socket programmierung und schreib ein programm womit man dateien uebers netzwerk auslesen kann(zu übungszwecken)

im prinzip klappt das ganz gut. nur will ich das der client dem server sagt WELCHE datei er angezeigt haben will: also "statisch" klappt das, aber wenns variabel seinen soll gehts net

das problem ist das ich com client in den socket die datei schreibe die ich haben will:
write(sockfd,ga,strlen(ga));
der server wohl an read weiterhin blockiert: ich komm nich drumherun ein \n mitzuschicken:
write(sockfd,"\n",1);

das problem was dabei entsteht, ist das der server zwar nun nicht mehr blockiert ist und den string in recvline hat ( ich gebe ihn immer testweise mit puts aus), aber das problem ist das er ja nun diese datei öffnen soll: und da sagt er immer "konnte datei net finden" also fehler beim fopen: die datei existiert, und ich vermute es liegt an dem newline. denn wenn ich mit puts den string ausgebe kommt da nicht

VON_PUTS_AUSGEGEBENER_STRING
WEITERER KRAM

sonden:

VON_PUTS_AUSGEGEBENER_STRING

WEITERER KRAM

und wg dieser leerzeile (\n) kann fopen die datei net finden, kommt durcheinander.

das ist so meine vermutung. aber ich weiss es nicht hunderprozentig

das war jetz alles was chaotisch den code kann man hier nachgucken

ftp://freax.mine.nu/incoming/cliecho.c // client
ftp://freax.mine.nu/incoming/srvecho.c // server
ftp://freax.mine.nu/incoming/unp.h // die header ( ja das ist die header vom stevens)



wenn ihr was net verstanden habt was mich net verwundern würde fragt nach, würde mich super über jeden ansatz freuen weil ich da echt net weiterkomme :) danke

anda_skoa
21-06-2003, 15:22
Original geschrieben von Freekazonid

der server wohl an read weiterhin blockiert: ich komm nich drumherun ein \n mitzuschicken:
write(sockfd,"\n",1);


Das liegt sicher an dieser Readline Funktion.
Die wird wahrscheinlich solange warten, bis sie eine Zeile lesen konnte.



problem ist das er ja nun diese datei öffnen soll: und da sagt er immer "konnte datei net finden" also fehler beim fopen: die datei existiert, und ich vermute es liegt an dem newline. denn wenn ich mit puts den string ausgebe kommt da nicht


Nun, wenn das letzte Zeichen des Strings ein \n ist, brauchst du es ja nu mi \0 zu überschreiben, oer du kopierst nur den Teilstring davor in einen neuen String
Siehe
man strncpy

Ciao,
_

Freekazonid
21-06-2003, 15:54
hallo,

also das mit strncpy war ne super idee, es klappt thx!!

ein kleines problem bleibt aber noch: und zwar wenn ich die test datei nehme, ist der pfade ja immer

/home/freeka/unpv12e/my0wn/3/test

also habe ich als 3. argument 33 angegeben., und das klappt auch. aber es sollen ja beliebige dateien genommen werden, und dann ist das problem: ich muss also irgendwie das ende ermitteln und das letuzte zeichen abziehen.

habe mir gedacht okay du ermittelst mit strlen die länge, und nimmst als letztes strncpy argument die rückgabe von strlen-1

aber wenn ich folgendes mache:

size_t tesT[100];
tesT=strlen(dest);

dann sagt der
:srvecho.c:34: incompatible types in assignment

aber der rückgabe wert von strlen ist doch ein size_t ?!
bzw geht mein "lösungsansatz" überhaupt?

danke nochmal :)

anda_skoa
21-06-2003, 16:26
Original geschrieben von Freekazonid
aber wenn ich folgendes mache:

size_t tesT[100];
tesT=strlen(dest);

dann sagt der
:srvecho.c:34: incompatible types in assignment

aber der rückgabe wert von strlen ist doch ein size_t ?!


Schon, aber tesT ist ein Array von size_t mit 100 Elementen

size_t tesT;
solte reichen

Ciao,
_

Freekazonid
21-06-2003, 16:53
Original geschrieben von anda_skoa
Schon, aber tesT ist ein Array von size_t mit 100 Elementen

size_t tesT;
solte reichen

Ciao,
_

yeah es klappt :) :)

dankeschön :cool: