|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 30.10.2007, 19:35 Titel: Datei senden |
|
|
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 "Drcken 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 Stck 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 zurck 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 |
|
|
croco97
Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 31.10.2007, 10:16 Titel: |
|
|
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 |
|
|
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 31.10.2007, 13:51 Titel: |
|
|
GBN.INI
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 |
|
|
croco97
Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 31.10.2007, 14:28 Titel: |
|
|
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 |
|
|
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 06.11.2007, 19:13 Titel: |
|
|
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 |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 06.11.2007, 19:22 Titel: |
|
|
Nimm halt testweise mal einen anderen Port. _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
darkinsanity aka sts
Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 08.11.2007, 13:16 Titel: |
|
|
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 |
|
|
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 06.12.2007, 18:59 Titel: |
|
|
sts hat Folgendes geschrieben: | GBN.INI
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 |
|
|
|
|
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.
|
|