Dateien schicken übers Internet

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: Dateien schicken übers Internet

BeitragDi, Jun 03, 2008 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
So, Ich habs jetzt endlich hinbekommen Dateien zu verschicken, jedoch nur über LAN. Ich nutze jetzt den Code von Jolinah.
Wenn ich versuche eine Datei übers Internet zu verschicken findet er zwar die Verbindung, aber es kommen 0 Bytes an. Die richtigen Ports am Router hab ich geöffnet.
Mir wurde gesagt, dass man richtig programmieren muss, damit das mit den Ports funktioniert.
Leider weis ich aber nicht wie das richtig ist. Deshalb frage ich jetzt euch, was ich hier falsch mache.

Server Code: [AUSKLAPPEN]
;Server
Graphics 640, 480, 0, 2
SetBuffer BackBuffer()


;Client-Objekt definieren
Type Client
   Field stream
   Field gesendet
End Type


;Datei öffnen
filename$ = "indigo.exe"
file = ReadFile(filename)
size = FileSize(filename)


;Server starten
tcp = CreateTCPServer(21)

buf_size = 65536 ;Buffer-Grösse 64kb
buf = CreateBank(buf_size)


Repeat
Cls

   ;Client annehmen
   c = AcceptTCPStream(tcp)
   If c <> 0 Then
      ;Neues Client-Objekt erstellen
      client.Client = New Client
     
      ;Den stream speichern
      client\stream = c
     
      ;Dem Client mitteilen welche Datei er erhält
      WriteString(client\stream, filename)
     
      ;Und die Grösse der Datei
      WriteInt(client\stream, size)
   EndIf
   
   
   
   ;Alle Clients durchgehen
   For client.Client = Each Client
   
      ;In der Datei die richtige Position suchen
      SeekFile(file, client\gesendet)
     
      ;Von dieser Position aus, buf_size bytes lesen
      ;gelesen gibt an, wie viele bytes wirklich gelesen wurden
      gelesen = ReadBytes(buf, file, 0, buf_size)

      ;Wenn was gelesen werden konnte...     
      If gelesen > 0 Then
     
         ;Dem Client die gelesenen bytes senden
         ;gesendet gibt an, wie viele bytes wirklich gesendet wurden
         gesendet = WriteBytes(buf, client\stream, 0, gelesen)
     
         ;Wenn was gesendet werden konnte
         If gesendet > 0 Then
     
            ;Beim Client-Objekt die Anzahl gesendeter Bytes um den
            ;richtigen Betrag erhöhen
            client\gesendet = client\gesendet + gesendet
     
     
            ;Wenn die Dateigrösse erreicht wurde...
            If client\gesendet = size Then
               ;Verbindung mit dem Client trennen
               CloseTCPStream(client\stream)
         
               ;Und Client-Objekt löschen
               Delete client
            EndIf
         
         Else
            ;Dem Client konnte nichts gesendet werden
            ;Verbindung trennen
            CloseTCPStream(client\stream)
            Delete client         
         EndIf
     
      Else
         ;Von der Datei konnte nichts gelesen werden
         ;Verbindung trennen
         CloseTCPStream(client\stream)
         Delete client
      EndIf
     
     
      ;Nächster Client...
   Next
   
   
Flip
Until KeyHit(1)

;Bufferspeicher freigeben
FreeBank(buf)

;Server beenden
CloseTCPServer(tcp)

;Datei schliessen
CloseFile(file)

End


Client Code: [AUSKLAPPEN]
;Client
Graphics 640, 480, 0, 2
SetBuffer BackBuffer()


;Verbindung mit dem Server herstellen
tcp = OpenTCPStream("localhost", 21)
If tcp = 0 Then
   Print "Verbindung konnte nicht hergestellt werden."
   WaitKey
   End
EndIf


;Dateiname und Grösse lesen
filename$ = ReadString(tcp)
size = ReadInt(tcp)

;Dateistream (Dateien in Ordner download laden)
file = WriteFile("download/" + filename)

buf_size = 65536  ;Buffergrösse 64kb
buf = CreateBank(buf_size)

;Anzahl gelesene Bytes
total = 0


;Zur Anzeige eines Ladebalkens
balken_x = 20
balken_y = 20
balken_breite = 600
balken_hoehe = 20
prozent# = 0.0

;Variable zum Beenden des Programms
quit = False
quit_message$ = ""

Repeat
Cls

   ;Wenn Daten gelesen werden können und die Datei noch nicht komplett ist
   If ReadAvail(tcp) > 0 And total < size Then
   
      ;buf_size Bytes vom Stream lesen
      ;gelesen gibt an, wie viele Bytes wirklich gelesen wurden
      gelesen = ReadBytes(buf, tcp, 0, buf_size)
     
      If gelesen > 0 Then

         ;Die gelesenen Bytes erhöhen
         total = total + gelesen
         
         ;Prozent ausrechnen
         prozent = Float(total) / Float(size)

         ;Die gelesenen Bytes in die Datei schreiben
         ;geschrieben gibt an, wie viele Bytes wirklich geschrieben wurden
         geschrieben = WriteBytes(buf, file, 0, gelesen)
         
         If geschrieben < 1 Then
           
            ;Es konnte nichts in die Datei geschrieben werden
            quit = True
            quit_message$ = "Fehler beim Schreiben in die Datei. Datei ist nicht komplett."
           
         EndIf
         
      Else
     
         ;Vom Server konnte nichts gelesen werden, Verbindungsunterbruch etc.
         quit = True
         quit_message$ = "Fehler beim Lesen vom Server. Datei ist nicht komplett."
         
      EndIf
         
   EndIf
   
   ;Wenn die Dateigrösse erreicht wurde...
   If total = size Then
      quit = True
      quit_message = "Die Datei wurde erfolgreich vom Server geladen."
   EndIf
   
   ;Rahmen zeichnen
   Color 255, 255, 255
   Rect balken_x, balken_y, balken_breite, balken_hoehe, False
   
   ;Balken zeichnen
   Color 255, 0, 0
   Rect balken_x + 1, balken_y + 1, prozent * (balken_breite - 2), balken_hoehe - 2


Flip
Until quit = True

;Bufferspeicher freigeben
FreeBank(buf)

;Verbindung schliessen
CloseTCPStream(tcp)

;Datei schliessen
CloseFile(file)

;Nachricht vor dem Beenden des Programms ausgeben
If quit_message <> "" Then
   Color 255,255,255
   Print quit_message
   WaitKey
EndIf

End
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

BadDeath

BeitragDi, Jun 03, 2008 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde mal nen anderen port als 21 nehmen, der ist für ftp schon vergeben. dann muss auch im router portforwarding aktiviert sein, damit er alle pakete an deinen pc übergibt.

mabox

BeitragDi, Jun 03, 2008 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
muss port forwarding beim Server und Client aktiviert sein?
welchen Port würdest du nehmen?

an meinem Router kann man nochwas einstellen, das heißt: "PPPoE Pass-Through". Das ist ausgeschalten, soll ich das mal einschalten?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

BadDeath

BeitragDi, Jun 03, 2008 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
bei dem port kann ich dir hohe werte wie 8364 empfehlen, die nimmt nämlich kaum einer und haben keine nachteile ^^

und soweit ich weiß ist dieses passtrough nur dazu, um mehrfach einwahlen zu erlauben, was bei den meisten anbietern verboten ist.

mabox

BeitragMi, Jun 04, 2008 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs jetzt mal mit Port 8364 versucht und (nur beim Server) den Port an Router geöffnet. Leider geht es immernoch nicht.

Kann mir noch jemand einen Tipp geben?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

mabox

BeitragSo, Jun 08, 2008 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid wegen Doppelpost, aber ich bin echt fast am verzweifeln mit dem Programm. Über LAN geht alles, nur über Internet klappts einfach nicht.
Ich zeig euch jetzt mal 2 Bilder mit den Routereinstellungen, Ich versteh die nämlich nicht ganz, oder besser gesagt ich weis nicht ob das was ich eingestellt hab wirklich richtig ist.

Hier sieht man die einstellungen..."Send files Fast" heißt meine erstellte Portregel
user posted image
Wenn man auf "Send files Fast" klickt kommt das hier:
user posted image
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group