Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Datei senden

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 30.10.2007, 18:35    Titel: Datei senden Antworten mit Zitat

Hi. ich hab ein Programm geschrieben, das Dateien über Internet und Netzwerk verschicken soll. das ganze ist in QB mit Hilfe der QBTCP-Lib geschrieben. Aber es funktioniert nicht. Es kommt der Fehler: "ERROR! Konnte nicht an [IP] senden!" Kann mir bitte jemand helfen? bin echt ratlos.
Code:

DECLARE SUB receivefile ()
DECLARE SUB sendfile ()
DECLARE SUB readconfigfile ()
'$INCLUDE: 'qbtcp.bi'




DIM SHARED con AS TCPConnection
DIM SHARED port AS INTEGER
DIM SHARED FinishedSendFile AS STRING
FinishedSendFile = "ÛÛ###--GBN-FileSendingFinished--###ÛÛ"
port = 1234  'Port auf standard einstellung setzten, falls in der GBN.ini
        'kein port= steht
DIM SHARED retval AS INTEGER
DIM SHARED fileBuffer AS STRING * 1024
CONST goingTOsendafile = 17238
CONST serverAcceptedTOsendafile = 82341
DIM wsd AS WSAData
DIM accon AS TCPConnection
DIM SHARED clientTCP AS TCPConnection
DIM message AS STRING




CLS
PRINT "Konfigurationsdatei wird ausgelesen..."
readconfigfile
PRINT "Initialisiere WSA..."

' Initialisierung von Winsock

retval = WSAStartup(MAKEWORD(1, 1), wsd)
IF retval <> 0 THEN
PRINT "ERROR: WSA konnte nicht initialisiert werden!"
SLEEP
END
END IF

'start! = TIMER
'DO
'LOOP UNTIL TIMER >= start! + 2
'sendfile
PRINT "Server-Modus wird gestartet..."
IF newTCPConnection(con, "", 0, port) = 0 THEN
PRINT "Error: Konnte den Server-Modus nicht starten."
SLEEP
retval = WSACleanup
END
END IF
' Jetzt ist GBN im Server-Modus. Das heiát dass es wartet,
' bis ein anderes GBN sich einw„hlt und eine Datei sendet.

PRINT "GBN wurde erfolgreich gestartet!"
start! = TIMER
DO
LOOP UNTIL TIMER >= start! + 2
PRINT "GBN - Hauptmen"
PRINT "Drcken sie >s< um eine Datei zu senden."
DO
   k$ = INKEY$
   IF k$ = CHR$(27) THEN GOTO exitProg
   IF UCASE$(k$) = "S" THEN sendfile
   retval = listenTCPConnection(con, 0, 0, accon)
   IF retval = 1 THEN clientTCP = accon
   msglen = receiveTCPConnection(clientTCP, message, 0, 0)
   IF msglen = -1 OR msglen = -2 THEN
   delTCPConnection clientTCP
   ELSE 'wir haben Post von einem Client - juhu!
   IF message = STR$(goingTOsendafile) THEN receivefile
   END IF




LOOP




exitProg:
delTCPConnection con
retval = WSACleanup
END

























endofprog:
PRINT "WSA wird beendet..."
retval = WSACleanup
start! = TIMER
DO
LOOP UNTIL TIMER >= start! + 2

SUB readconfigfile
OPEN "GBN.ini" FOR INPUT AS #1
DO
INPUT #1, zeile$
IF UCASE$(LEFT$(zeile$, 5)) = "PORT=" THEN
port = VAL(MID$(zeile$, 6))
END IF
LOOP UNTIL EOF(1)
END SUB

SUB receivefile
DIM message AS STRING
PRINT "Ein PC sendet gerade eine Datei an sie..."
OPEN "file.tmp" FOR BINARY AS #1
retval = sendTCPConnection(clientTCP, STR$(serverAcceptedTOsendafile), LEN(STR$(serverAcceptedTOsendafile)))
DO
retval = receiveTCPConnection(clientTCP, message, 0, 0)
IF retval > 0 THEN ' Der Client sendet ein Stck der Datei
IF message = FinishedSendFile THEN EXIT DO
fileBuffer = SPACE$(1024)
fileBuffer = message
PUT #1, , fileBuffer$
END IF
LOOP
CLOSE #1
PRINT "Datei vollst„ndig empfangen!"
PRINT "Wie m”chten sie die empfangene Datei nennen?"
INPUT "", filename$
NAME "file.tmp" AS filename$
END SUB

SUB sendfile
DIM message AS STRING
DIM smessage AS STRING
DIM sendtoPC AS TCPConnection
' zum Datei senden
INPUT "Datei: ", file$
INPUT "Empf„nger-IP: ", sendtoip$
PRINT "Port"; port
PRINT "Gehe in den Client-Modus..."
delTCPConnection con
PRINT "Stelle Verbindung her..."
retval = newTCPConnection(sendtoPC, sendtoip$, port, 0)
IF retval = 0 THEN
PRINT "ERROR: Konnte keine Verbindung zu "; sendtoip$; "herstellen!"
PRINT "       Port:"; port
SLEEP
retval = WSACleanup
END
END IF

message = STR$(goingTOsendafile)
retval = sendTCPConnection(sendtoPC, message, LEN(message))
IF retval = 0 THEN
PRINT "ERROR: Konnte nicht an "; sendtoip$; " senden!"
delTCPConnection con
retval = WSACleanup
SLEEP
END
END IF

PRINT "Warten auf Antwort des Servers..."
PRINT "Abbrechen mit ESC."


' Der Server muss diese Konstante antworten: ServerAcceptedTOsendafile
DO
   IF INKEY$ = CHR$(27) THEN GOTO endofsendfile
   retval = receiveTCPConnection(sendtoPC, smessage, 0, 0)
   IF retval > 0 THEN 'wir haben Post vom Server
      IF smessage = STR$(serverAcceptedTOsendafile) THEN
         PRINT "Server hat Dateisendung akzeptiert."
         PRINT "Datei wird gesendet..."
         EXIT DO
      END IF
   END IF
LOOP

OPEN file$ FOR BINARY AS #1
DO
   fileBuffer = SPACE$(1024)
   GET #1, , fileBuffer
   retval = sendTCPConnection(sendtoPC, fileBuffer, LEN(fileBuffer))
LOOP UNTIL EOF(1)
CLOSE #1
retval = sendTCPConnection(sendtoPC, FinishedSendFile, LEN(FinishedFileSend))
PRINT "Datei wurde gesendet!"
endofsendfile:
PRINT "GBN kehrt zurck in den Server-Modus..."

delTCPConnection sendtoPC
IF newTCPConnection(con, "", 0, port) = 0 THEN
   PRINT "Error: Konnte den Server-Modus nicht starten."
   SLEEP
   retval = WSACleanup
   END
END IF

END SUB

SUB sendtext

END SUB



Bitte helft mir! Danke im voraus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 31.10.2007, 09:16    Titel: Antworten mit Zitat

Viel kann ich jetzt nicht dazu sagen. Aber:

1.) Wäre praktisch, Deine GBN.ini zu posten.
2.) An welche IP hast du denn gesendet? Und auf welchem Port? Und was lauscht beim Server auf diesen Port? Ist am Server eine Firewall aktiv? Kannst du den Server pingen?

Viele Grüsse!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 31.10.2007, 12:51    Titel: Antworten mit Zitat

GBN.INI
Code:
port=1234


an verschieden IP´s. Einmal an nen Freund, für den ich das Programm mache und einmal an einen anderen PC der über Netzwerk mit meinem verbunden war.
Port war immer 1234
Die Firewall von Windows blockt erst die NTVDM.EXE aber ich sag "nicht mehr blocken"
Den anderen Rechner konnte ich pingen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
croco97



Anmeldungsdatum: 04.11.2005
Beiträge: 260

BeitragVerfasst am: 31.10.2007, 13:28    Titel: Antworten mit Zitat

Hmmmh, "IP von Freund irgendwo" kannste wahrscheinlich erstmal vergessen. Da sind viel zu viele Fallen unterwegs. Testrechner im eigenen Netz ist schon besser.

Wichtig: Auf jeden Fall für den Test auf beiden Rechner Firewalls komplett deaktivieren, damit diese Fehlerquelle mit Sicherheit ausgeschlossen ist.

Dann ist immer noch nicht klar, welches Programm auf der anderen Seite auf Port 1234 lauscht. Auf dem Testpartner mal auf cmd

netstat -na

eingeben und schauen, ob auf Port 1234 das vorgesehene Programm hört.

Erst wenn das der Fall ist, würde ich das Debuggen am Sende-Rechner starten.

Grüsse!

Croco
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 06.11.2007, 18:13    Titel: Antworten mit Zitat

Firewall hat ME keine
Ist es möglich, dass speziel der Port 1234 von Windows o.Ä. reserviert ist? (Skype zum Beispiel hat einen reservierten Port)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 06.11.2007, 18:22    Titel: Antworten mit Zitat

Nimm halt testweise mal einen anderen Port. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
darkinsanity
aka sts


Anmeldungsdatum: 01.11.2006
Beiträge: 456

BeitragVerfasst am: 08.11.2007, 12:16    Titel: Antworten mit Zitat

auch mit anderen Ports und deaktivierter Firewall bei XP gehts nicht.
netstat -na hat Folgendes geschrieben:

U:\>netstat -na

Aktive Verbindungen

Proto Lokale Adresse Remoteadresse Status
TCP 0.0.0.0:65 0.0.0.0:0 ABHÖREN
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bimi



Anmeldungsdatum: 03.12.2007
Beiträge: 66

BeitragVerfasst am: 06.12.2007, 17:59    Titel: Antworten mit Zitat

sts hat Folgendes geschrieben:
GBN.INI
Code:
port=1234


an verschieden IP´s. Einmal an nen Freund, für den ich das Programm mache und einmal an einen anderen PC der über Netzwerk mit meinem verbunden war.
Port war immer 1234
Die Firewall von Windows blockt erst die NTVDM.EXE aber ich sag "nicht mehr blocken"
Den anderen Rechner konnte ich pingen.


Geht es auf localhost?

Wenn das schon nicht funktioniert, brauchst du den Freund erstmal gar nicht zu bemühren....
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz