C Socket - Datei versenden

Diskutiere C Socket - Datei versenden im Developer Network Forum im Bereich Hardware & Software Forum; Hi, habe ein Problem mit Winsock unter C. ICh mache mit dem clienten einen Screenshot, und schicke den blockweise an den Server, der ihn dann...
  • C Socket - Datei versenden Beitrag #1
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Hi, habe ein Problem mit Winsock unter C.
ICh mache mit dem clienten einen Screenshot, und schicke den blockweise an den Server, der ihn dann nach und nach in eine Datei speichert.
Wenn ich für die Verbindung als IP "127.0.0.1" nehme klappt die Übertragung reibungslos.
Nehem ich aber nun meine Internet IP klappt die Übertragung lediglich bis zu einer Blockgröße von 2.
Alles was drüber ist, bewirkt eine verschiedbung des Screenshots, bzw. Flächen haben andere Farben die sie nicht haben sollen, kurz das Bild ist entstellt.
Weiß einer vielleicht woran es liegt bzw. muss ich, wenn ich etwas mit Winsock schicke beachten, also bei der Blockgröße zum Beispiel?
Die Datei schreibe ich mit WriteFile, auhc den bitmap header (hab das aus einem Beispiel ausm Internet übernommen).
Vom Prinzip muss es ja richtig ablaufen, da es mit der 127.0.0.1 IP klappt, oder?

MfG
Anno1989
 
  • C Socket - Datei versenden Beitrag #2
peterfido

peterfido

Bekanntes Mitglied
Dabei seit
16.02.2000
Beiträge
1.785
Reaktionspunkte
0
Ort
Berlin
Ein eigenes Protokoll mit einer Fehlererkennung auf Prüfsummenbasis oder so wäre meine Empfehlung.
 
  • C Socket - Datei versenden Beitrag #3
R

retn

Bekanntes Mitglied
Dabei seit
04.10.2007
Beiträge
152
Reaktionspunkte
0
vorab, remote oder loopback ip ist jacke.. kann höchstens am senden und empfangen der daten liegen, daher code plz :) oder genau hingucken was du schickst und was ankommt..
 
  • C Socket - Datei versenden Beitrag #4
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Okay, ich habe nun überprüft, wieviel gesendet wird.
Block größe von 100 werden manchmal nur 14 (und kurz darauf 86) Zeichen vom Server empfangen, vom Client gesendet werden durhcgehend 100.
Jemand eine Idee wieso?
Im Gesendeten kommen öfters binäre Nullen vor, kann es sein, dass recv nur bis zu diesen empfängt?
 
  • C Socket - Datei versenden Beitrag #5
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Okay, ich habe nun überprüft, wieviel gesendet wird.
Block größe von 100 werden manchmal nur 14 (und kurz darauf 86) Zeichen vom Server empfangen, vom Client gesendet werden durhcgehend 100.
Jemand eine Idee wieso?
Hängt vermutlich mit der Speicher-/Blockverwaltung des TCP/IP-Stacks zusammen. Ist letzlich aber auch egal, ob Du 1x100 oder 2x50 bekommst. Funktioniert der Code, wenn Du das berücksichtigst?

Im Gesendeten kommen öfters binäre Nullen vor, kann es sein, dass recv nur bis zu diesen empfängt?
Nein. Wenn Du 1000 Nullen schickst, dann kommen auch 1000 Nullen an (evtl. sind mehrere recv-Aufrufe dafür nötig). Was Du schickst, intressiert nicht.
 
  • C Socket - Datei versenden Beitrag #6
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Naja, eigendlich gehen dann doch Daten verloren, oder was meinst du damit, wenn ich das berücksichtige? Ich schicke quasie als Beispiel 5 Blöcke zu je 100:
Block Empfangen Gesamt bisher
1.Block: 100 empfangen 100
2.Block: 14 empfangen 114
3.Block: 86 empfangen 200
4.Block 100 empfangen 300
5.Block 100 empfangen 400

Es kommend ann ja nur 400 statt den üblichen 500 an. Bei block 2 gehen doch somit 86 bytes und bei Block 3 14 bytes verloren.
Oder seh ich da was falsch?
Denn irgendwas muss verloren gehen, da das Bild ja verfälscht ankommt...:confused:
 
  • C Socket - Datei versenden Beitrag #7
R

retn

Bekanntes Mitglied
Dabei seit
04.10.2007
Beiträge
152
Reaktionspunkte
0
theo. wenn du 100 byte verschickst, werden auch 100byte ankommen, oder nen kleines tool manipuliert deine pakete :pP
wenn du net viel code hast, poste ihn doch :) aber nur das wesentliche, wie
datei lesen, zerteilen schicken, empfangen, schreiben^^
 
  • C Socket - Datei versenden Beitrag #8
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Welches kleine Tool sollte das denn sein? o_O
Ist nur die Frage, wie ich eine Art Kontrollmechanismus da rein beko0mmen soll, wie peterfido das meinte...
Wenn einfach nur 14 bytes gelesen werden aber 100 geschickt kann ich da doch auch nichts machen oder was meintest du?
 
  • C Socket - Datei versenden Beitrag #9
R

retn

Bekanntes Mitglied
Dabei seit
04.10.2007
Beiträge
152
Reaktionspunkte
0
nah lass dich net vom wesentlichen ablenken, war eher nen kleiner joke ;)
 
  • C Socket - Datei versenden Beitrag #10
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
Welches kleine Tool sollte das denn sein? o_O
Ist nur die Frage, wie ich eine Art Kontrollmechanismus da rein beko0mmen soll, wie peterfido das meinte...
Wenn einfach nur 14 bytes gelesen werden aber 100 geschickt kann ich da doch auch nichts machen oder was meintest du?
Bei TCP kommt nix weg ;-)
Wenn Du 100 Byte schickst, dann kommen auch INSGESAMT 100 an. Aber die müssen nicht auf einen Schlag ankommen. Du brauchst also eine Leseroutine, die in etwa so aussieht:
Code:
int bytesToReceive = 100;
int bytesReceived = 0;
char buffer[100];

while (bytesReceived < bytesToReceive)  {
   int len = recv(socket, &buffer[bytesReceived], bytesToReceive  - bytesReceived, irgendwelcheflags);
   bytesReceived += len;
}
Der Code ist nur so runtergeschrieben und ist NICHT getestet. Eine Fehlerbehandlung muß natürlich auch noch hinzugefügt werden.
 
  • C Socket - Datei versenden Beitrag #11
R

retn

Bekanntes Mitglied
Dabei seit
04.10.2007
Beiträge
152
Reaktionspunkte
0
es kommt soviel an, wieviel du verschickst.. sind es 100byte pakete, kommmen auch 100 auf einen schlag^^ KLAR, dass wenn recv nur nen 64 byte puffer hat, kannst du diese 100byte net beim ersten recv komplett lesen, dein prog hat 100 daher npl0r :p also anno g0g0g0 xD
 
Zuletzt bearbeitet:
  • C Socket - Datei versenden Beitrag #12
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
@Unimatrix: Okay, hab deinen Code angepasst und es klappt!!!
Hab es sogar mit einem Bekannten ausprobiert, das Senden klappt nun einwandfrei :)
Vielen vielen Dank für euere Hilfe und Antworten!

MfG
Anno1989
 
  • C Socket - Datei versenden Beitrag #13
FerFemNemBem

FerFemNemBem

Moderator
Teammitglied
Dabei seit
11.09.1999
Beiträge
4.494
Reaktionspunkte
0
Halloechen,

haste denn auch mal geschaut wo bei Deinem Code nun der Fehler war? Evtl. posteste Deine (alte) Leseroutine doch mal hier - duemmer wird man davon sicher nicht... ;)

Gruss, FFNB.
 
  • C Socket - Datei versenden Beitrag #14
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Hi, die habe ich in der Form leider nicht mehr, bereits überschrieben, ich sichere meine Daten eigendlich nur alle 2 Wochen ca, und die alte ist glaube ich nicht sehr sehenswert.
Ehrlich gesagt weiß ich auch nicht wo nun der Fehler war. Ich denke einfach ich habe das mit dem Blockweise lesen und empfangen falsch auf einander abgestimmt.
 
  • C Socket - Datei versenden Beitrag #15
R

retn

Bekanntes Mitglied
Dabei seit
04.10.2007
Beiträge
152
Reaktionspunkte
0
hoi anno :)
wenn du den fehler nicht weisst, auf keinen fall vermuten, mach dir das wirklich klar, sonst lernste nichts.. denn da muss wirklich net viel abgestimmt werden..
mich würde auch die neue send und recv routine noch interessieren, liegt bei dir ^^
 
  • C Socket - Datei versenden Beitrag #16
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Okay, ich habs nun hinbekommen, dass es auch in einer Schleife funktioniert.
Es gibt nur noch am Ende einen kleinen Fehler ansonsten wird nun alles brav geschickt.
 
Thema:

C Socket - Datei versenden

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben