ich habe eine Client Server Anwendung.
wenn ich diese lokal auf dem rechner teste, klappt alles wunderbar.
Der Client sendet datan an den server und der sendet die daten zurueck an den clienten.
Er sendet sachen wie Login daten ( Login:open_mouth:K) und dann transferiert er noch eine Datei die ich blockweise a 200 byte(data:xdfserfg) sende. Wenn er diese erhalten hat bekommt er das signal zum starten (Start:open_mouth:K)
wenn ich beim clienten die 127.0.0.1 eingebe klappt alles bestens, aber kaum probiere ich den clienten von einen anderen rechner aus aus, dann klappt das login aber beim transferieren des File treten dann probleme auf und er beendet sich.
Dies bedeutet das er das Login:open_mouth:K empfaengt aber die daten die ich in blocks a 200 Byte sende nicht.
Dort wo der Client gestartet wurde ist eine Firewall installiert.
Die Winsock Elemente kommunizieren auf dem Port 12345.
Weiss jemand wo der fehler liegt? Liegt es an der Firewall ? Soll ich einen anderen Port fürs winsock element nehmen?
Bin mit mein Latein am Ende und waere ueber hilfe sehr dankbar!
Hallo Alex
Unter Windows XP ist es so, das man eine bestimmte Anwendung für die Firewall freigeben kann, es wird explizit danach gefragt.
Darüberhinaus kommt es auf Deine Firewall an, wie es genau geht.
Aber herzlichen Glückwunsch für dein Programm, das es schon funktioniert. Somit ist eigentlich Optimismus angesagt.
Wie stellst Du denn die Blockgröße ein? Mit TCP/IP kan man doch beliebig große Dateien transportieren, ohne irgendwelche Einstellungen machen zu müssen.
Bei den Netzwerkkarten habe ich auch schon mal eine Option zur Einstelllung der Blockgrößen gesehen, da kannst Du auch mal schauen.
Bei den Einstellungen fürs Netzwerk kann man auch viel falsch machen.
MfG
Matthias
Schon mal dran gedacht die Firewall einfach zu deaktivieren?
mfg
Chris
Hallo Chris,
also ich habe das progg via msn versendet zum zielrechner. dort wurde es installiert und ausgefuehrt. von daher weiss ich net obse was an der Firewall vestellt hat.
Aber das komische ist das zum bsp. der transfer von „Login:open_mouth:K“ und „File:START“ sowie „File:End“ gehen, sonst würde der Client net reagieren
Wenn ich aber bsp. die konfiguration des Clienten aus der DB des Servers auslese und in ein File schreibe. dieses dann öffnen und binaer mit einer grösse von 200 Bytes einlese und diese an in der art
bsp:
dim sBuffer as string*200
sBuffer = Space$(200)
Get #F, , sBuffer
sende, so kommen sie nicht an. Meinst du das die Firewall das dann dort blockiert?
Hallo Matthias,
vielen danl erst einmal für deine antwort
also ein stueck weiter unten habe ich schon einmal eine Antwort gepostet. Was die sache mit dem Senden angeht, das poste ich dir gleich mal
und naja wenn es so weiter geht bin ich hier echt am verzweifeln. lokal auf dem rechner klappt es nur net über das inet
so nun hier der code
Private Function SendeFile(dateiname As String, c As Winsock) As Boolean 'File wir binaer gesendet...
On Error GoTo fehler
Dim F As Integer
Dim sBuffer As String
Dim nFileSize As Long
Dim nFilePos As Long
Dim nBytesToRead As Long
Dim datei As String
Const Blocksize = 200
SendeFile = False
datei = dateiname
F = FreeFile
Open datei For Binary As #F
If InStr(datei, "\") \> 0 Then datei = Mid$(datei, InstrRev(datei, "\") + 1)
nFileSize = LOF(F)
Senden c, "File:Start:" + ""
Do While nFilePos nFileSize Then
nBytesToRead = nFileSize - nFilePos
End If
sBuffer = Space$(nBytesToRead)
Get #F, , sBuffer
Senden c, "File:smiley:ata:" + sBuffer
nFilePos = nFilePos + nBytesToRead
DoEvents
Loop
Close #F
Senden c, "File:Ende:Fileende erreicht."
SendeFile = True
Exit Function
fehler:
Exit Function
End Function
Sub Senden(w As Winsock, Msg As String) 'Daten werden an 1 bestimmten Clienten gesendet!
On Error Resume Next
Dim Nutzer As String
If w.Tag = "" Then
Nutzer = "Unbekannt"
Else
Nutzer = w.Tag
End If
If w.State = 7 Then
w.SendData Msg + prüfzeichen
If UCase(Left(Msg, 4)) = "TEXT" Then
If Right(Msg, Len(prüfzeichen)) = prüfzeichen Then Msg = Left(Msg, Len(Msg) - Len(prüfzeichen))
Text1.text = Text1.text & vbNewLine & "Gesendet an " + Nutzer + ": " + Msg
Text1.SelStart = Len(Text1.text)
End If
Else
Exit Sub
End If
Do
DoEvents
Loop Until Not (datasend)
End Sub
MFG Alex
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Alex
Ich würde sagen, das die Einteilung des Datenstromes in 200 Bytes möglicherweise Systemwidrig ist, weil es den Traffic ausbremst, der Datenstrom erhält eine Störung, der Client oder Server streikt darauf hin möglicherweise.
Dafür spricht auch, das man mit TCP/IP beliebig große Dateien in einem Stück übertragen kann.
Außerdem müßte ich selber erst mal prüfen (weil ich es aus dem Kopf nicht weiß), ob die Accept Methode jedes mal neu aufgerufen werden muß, wenn etwas übertragen wird.
Dann kann ich mich irgendwie daran erinnern, das es möglich ist, den Übertragungsfortschritt ohne ewige Do Loops zu erfragen.
Do Loops mit DoEvents sind nicht besonders elegant/funktioniert nicht immer so, wie es soll.
Das VB reagiert allergisch auf solche Feinheiten.
Mehr kann ich aber nicht helfen.
MfG
Matthias
vielen dank erst einmal für deine Antwort
Den Datenstrom habe ich schon reduziert. Anfangs wollte ich mehr mit einmal senden, aber aus deinen genannten Gruenden habe ich ihn reduziert auf halt 200 Bytes. Kleiner würde ich ihn nicht machen wollen, aber ein versuch ist es allemal wert
Was die Sache mit der Accept Methode angeht. Wenn der Client eine Anfrage an den Server sendet, so muss die Akzeptiert werden ( Accept Methode) Sobald dies einmal geschehen ist kannst du je nach belieben daten senden! Also daran liegt es definitiv nicht
Lokal auf den rechner klappt ja alles. Also den server starten und beim Clienten die 127.0.0.1 angeben
Was die Sache mit den Do und Doevents angeht.
Du konntest nicht erkennen was das genau macht. Also wenn die Sub senden aufgerufen wird, werden die daten gesendet.
danach soll der rechner warten bis die daten aus der leitung sind.
Wenn jedoch eine andere aktion aufgerufen wird soll er dies machen. Deswegen das doevents
Verlassen wird die schleife sobald die daten gesendet wurden. dann wird das flag gesetzt
So langsam bekomme ich das gefuehl das es daran liegt das sie ne Firewall hat. Ich werde heute mal zu einer bekannten gehen und den clienten dort mal installieren und schauen ob es dann klappt
Wenn ja dann weiss ich woran es liegt, wenn nicht bekommen ich noch graue haare *grml*
Trotzdem nochmals ein danke an dich für deine Hilfe
MFG Alex
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Alex
Du schreibst, es wurde eine Verbindung hergestellt, aber die Datenübertragung klappt nicht. Hast Du das protocol auch auf TCP/IP eingestellt?
Übertrage doch zunächst einen einzelnen Block von sagen wir mal 1024 kByte. Eine Aufteilung der Datenübertragung auf 200 Bytes erscheint mir nicht sinnvoll. Die Aufteilung des Datenstromes übernimmt das Windows, da brauchst Du dich gar nicht drum zu kümmern.
Machst Du das trotzdem, wie in Deinem Code, befürchte ich eine Art von Interferenz.
MfG
Matthias
also sie klappt ja. Ich kann daten senden wie ich will es kommen alle an. Wenn ich nun das file sende dann macht es probleme. da gehen immer daten verloren
Sende ich die daten im Step by Step modus also F8 dann geht es und die kommunikations passt.
Ich habe nun versucht die daten mittel Line input auszulesen und zu senden, auch dabei macht es probleme
So langsam bin ich mit meinem Latein am ende
Die verbindung ist auf TCP / IP gesetzt.
MFG Alex
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]