TCP-Problem mit Dateien

Übersicht BlitzBasic Beginners-Corner

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.

Eingeproggt

Betreff: TCP-Problem mit Dateien

BeitragDi, Sep 04, 2007 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo...

Ich wollte mir mal schnell ne TCP-Funktion zum übertragen von Dateien schreiben. Also die Grundstrkutur eines TCP-Programms hab ich ja, aber aus irgendeinem Grund empfange ich nur "0" (Ascii 48), obwohl ich einen String mit 567 Zeichen sende. Sind soviel Zeichen zuviel für TCP? Oder liegt es daran, dass der String eig Binärdaten aus einer PNG enthält?

Hier mal mein Versuch:
Code: [AUSKLAPPEN]
;Sender
Reader=ReadFile("Alien.png")
tcpstream=OpenTCPStream("192.168.20.2",7999)

If tcpstream Then
   Repeat
      tcpstring$=tcpstring+Chr(ReadByte(Reader))
   Until Eof(Reader)
   
   WriteString tcpstream,tcpsttring
   tcpstring=""
   
   CloseTCPStream tcpstream
   CloseFile Reader
EndIf


Code: [AUSKLAPPEN]
;Empfänger
tcpserver=CreateTCPServer(7999)

If tcpserver Then
   
   Repeat
      tcpstream=AcceptTCPStream(tcpserver)
      If tcpstream<>0 Then
         tcpstring$=ReadString(tcpstream)
         For i=1 To Len(tcpstring)
            DebugLog Asc(Mid(tcpstring,i,1))
         Next
         Exit
      EndIf
   Until KeyHit(1)
   
   CloseTCPServer tcpserver
EndIf


Die Methode mit String hab ich übrigens deshalb gewählt, weil es wesentlich Netzwerkschonender und einfach ist, als jedes Byte einzeln zu senden. Außerdem hatte ich das schon probiert... Der Empfang brach ebenfalls nach dem ersten Byte ab.

Woran liegt das?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ZaP

BeitragMi, Sep 05, 2007 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;Sender
Reader=ReadFile("Alien.png")
tcpstream=OpenTCPStream("192.168.20.2",7999)

If tcpstream Then
   Repeat
      tcpstring$=tcpstring$+Chr(ReadByte(Reader)) ;<--- hast das $ vergessen ;)
   Until Eof(Reader)
   
   WriteString tcpstream,tcpstring$ ;<-- hier nochmal
   tcpstring$="" ;<-- und hier auch
   
   CloseTCPStream tcpstream$ ;<-- hier schonwieder.
   CloseFile Reader
EndIf
Starfare: Worklog, Website (download)

Eingeproggt

BeitragMi, Sep 05, 2007 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mich jetzt irre, löscht bitte meinen Account wegen überirdischer Inkompetenz Rolling Eyes

Man muss das $ doch nur bei der ersten Deklaration dazuschreiben, danach weiß das Blitz sozusagen schon. Ich weiß, dass es mit übersichtlicher und "schöner" wär, aber nicht falsch, oder?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

D2006

Administrator

BeitragMi, Sep 05, 2007 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Von der Benutzung von ReadString und WriteString würde ich abraten. Schon allein, weil es in deinem Fall keinen Sinn macht.

Schick doch einfach immer 4 Byte rüber per WriteInt und ReadInt. Wenn du noch mehr gleichzeitig verschicken willst, nutze Banks und ql:WriteBytes / ql:ReadBytes.

Achja: Bei dem $ hast du recht. Blitz begnügt sich, wenn man es bei der ersten Verwendung hinschreibt.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Eingeproggt

BeitragMi, Sep 05, 2007 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Int geht mein Testprogramm recht gut, danke.
Leider tauchten danach folgende Probleme auf:
Ich bau das in ein größeres Programm ein und plötzlich krieg ich keinen TCP-Stream mehr zustande? (OpenTCPStream ergibt 0)
Der Port wird zumindest von meinem Prog nicht belegt und vorhin funktionierte er.
und außerdem braucht TCP doch nen Header von 22 Byte oder so. Dh ich würde für 4 Byte Daten 26 Byte schicken? Ein grobes Missverhältnis, oder?
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ZaP

BeitragDo, Sep 06, 2007 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja vertippt hast du dich in deinem Code trotzdem. Und es ist auch ein schlechter Stil das $ wegzulassen, finde ich.
Starfare: Worklog, Website (download)

Eingeproggt

BeitragFr, Sep 07, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Darf ich mal ne etwas direkte Frage stellen?

Mein Fehler war genauso dumm wie simpel. Embarassed
Warum seid ihr da nicht draufgekommen? Wollt ihr mir nicht helfen oder könnt ihr es nicht? Ich mein das ist nicht die erste Frage, die hier nicht zu meiner Zufriedenheit beantwortet wurde. Aufklärung brachte nun das englische Forum, in dem man nicht lang um den heißen Brei herumredet von wegen Forumregeln, Umgangston, wo man was zu posten hat, usw. Die erste Antwort (2-zeilig) hat den Nagel auf dem Kopf getroffen, und ihr könnt mir das in 2 Tagen nicht sagen bzw auch nur irgendwelche Tipps oder Ratschläge geben?

Achja, der Fehler war, dass ich die IP als Int angegeben hab, TCP wills ja als String.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Dreamora

BeitragFr, Sep 07, 2007 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Rechtschreibefehler sind der einzige typus fehler den man nicht einfach sieht weil das menschliche Hirn da ziemlich erbärmlich ist.
Deswegen habe auch verschiedene Leute auf BM gewechselt, dort kann man eine Variablendeklaration erzwingen statt sich 2 Tage lang zu fragen warum irgend ein Mist nicht geht.

Die einzige Möglichkeit da normalerweise drauf zu kommen bei grösserem Source, ist mit Testausgaben überall um zu überwachen wo etwas schief läuft ... oder indem man im Debugmodus durchstept.

Sowohl als auch ist allerdings deine Sache nicht unsere.
Wir versuchen dir hier zu helfen soweit uns möglich, aber wir sehen nicht alles.
Im Debugmodus mit durchstepen hättest du den Fehler aber eigentlich finden können.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

D2006

Administrator

BeitragFr, Sep 07, 2007 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Willst du uns verarschen?

Du beschuldigst uns einen Fehler nicht gefunden zu haben, den wir nicht finden konnten, weil du keinerlei Code gezeigt hast. Hinzu kommt, dass es ein Fehler ist, den du im hier angegebenen, älteren Code nicht gemacht hast. Denn dort oben steht die IP korrekt als String drin.

Anderes ausgedrückt: Du redest diesen Portal hier madig, weil du zu doof bist ne korrekte Fehlerbeschreibung abzuliefern? Raus hier!

Anmerkung: Das hier spiegelt meine Meinung als Person wieder. Nicht als Admin. Ich werde ihn weder bannen noch verwarnen. Dafür werde ich ihn zukünftig gering schätzen... Rolling Eyes

Ein wütender
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Eingeproggt

BeitragFr, Sep 07, 2007 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt sind wir wieder beim leidigen Thema Rolling Eyes

Anstatt hier irgendwas nützliches zu schreiben, schimpfen sogar die Mods los. Hey, D2006, halt dich mal an deine eigenen Vorschriften und achte auf deinen Ton. (auch wenn du das alles nicht als Admin geschrieben hast...)

Zitat:
Raus hier!


Wie du willst. Find ich extrem schad, dass man hier nur Streiterein erlebt, aber was solls. Wenn ich noch weiter den Mund aufmache, haut ihr mich raus, da geh ich lieber "freiwillig".

Und bevor hier noch einige mehr losschimpfen: Ja, ich hab nen alten Code hier drin... sry, aber jetzt is eh schon wurscht.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

Dreamora

BeitragFr, Sep 07, 2007 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Eingeproggt: wenn du ein problem hast dann zeig bitte künftig auch den wirklichen Source zum jeweiligen Zeitpunkt. Es hilft wenig wenn man von Source ausgeht der garnix mehr mit der Realität zu tun hat. Das würde man dann als sinnfreies Posting einstufen müssen, weil es niemandem hilft sondern nur zu ratespielen und zorn führt wie der thread hier leider zeigt ...

drum
keep cool people

closed.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

BladeRunner

Moderator

BeitragSa, Sep 08, 2007 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir bleibt nur ein Kopfschütteln.
Jetzt ist die Administration also schlecht weil Du es nicht gebacken kriegst deine Frage beantwortbar zu stellen?
Noch dazu kommst Du extremst fordernd daher. Wir alle tun das hier unentgeltlich in unserer Freizeit, also was erwartest Du ?
Wenn Du bereit bist mir 25€ Brutto die Stunde abzudrücken und in der Lage bist Deine Problemstellungen vernünftig zu formulieren UND alles relevante Material abzugeben, DANN kannst Du von mir eine Lösung erwarten und fordern, aber auch nur dann.

Alles andere hier - von jedem einzelnen- ist GOODWILL, und ich werde mir sicherlich zu nichts hier einen derben Kopf machen wenn ich das nicht möchte. Wir helfen hier seit Jahren so gut wir können, umsonst und fast jeden Tag, aber wir sind sicher nicht eure Debugger-Sklaven.

Auch wenn D2006 hart reagiert hat, denke ich es war angemessen. Wieso? Weil du zuerst in die Offensive gegangen bist, indem Du uns Unfähigkeit und Unlust unterstellst.

Dabei solltest Du Dir wirklich nochmal auf der Zunge zergehen lassen WAS Du getan hast: Du rufst bei deinem Mechaniker an und sagst Dein Auto ist kaputt, beschreibst knapp einen Fehler aber gibst nicht das Auto zur Reparatur. Statt dessen hast Du ihm 2 Wochen vorher ein Bild von einem ANDEREN Fahrzeug geschickt und erwartest nun dass er den Fehler blind und auf Entfernung korrigiert. Gratuliere zu dieser Weitsicht.
Das Deine Anfrage auf bb.com so rasch und korrekt beantwortet wurde lag schlicht daran dass sie einfach beantwortet werden KONNTE - denn dort hast du ja den korrekten Code angegeben.

Bevor Du also hier andere verdammst und wieder einmal das böse Forum schuld ist solltest Du Dir an die eigene Nase greifen.
Denn was Du hier tust ist andere den Unmut über DEINEN Mist spüren zu lassen - da hast Du dir selbst ein schönes Süppchen 'eingeproggt'.

Ich vermute aber es wird gehen wie immer: die eigenen Fehler sind nicht existent, also muss ja jemand anders schuld sein, nicht wahr? Gut, so sei es. Schieb Deinen Groll auf uns. Ehrlich gesagt interessiert mich das nicht die Bohne, denn User die so ignorant und fordernd sind wie Du sind vielleicht wirklich woanders besser aufgehoben.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group