Client/Server funktioniert nur über LAN
Verfasst: 05.01.2011 20:28
Hi,
wie der Titel schon sagt hab ich ein Client/Server Programm geschrieben, dass bis jetzt jedoch nur übers LAN funktioniert. Gibs da irgendein Trick, oder Fehler der sich einschleichen kann?
Natürlich ist der Port freigeschalten (getestet und funktioniert) und Firewall ist auch aus.
Hier mal der Code:
Client:
Server:
Wie ihr seht, nichts aufregendes, wahrscheinlich auch nicht wirklich gut gecoded aber es funktioniert bis jetzt ohne Fehler.
Mir fallt auf, dass der Client, wenn ich eine Internet-IP eintrage ewig braucht bis merkt, dass er sich nicht verbinden kann, und sich schließlich beendet. Wenn ich jedoch localhost, oder eine IP im Netzwerk eingebe, verbindet er sich in Sekundenschnelle.
Ist ja auch klar, dass er übers Internet länger braucht, aber kann es z.B. sein, dass der Client eine Zeitüberschreitung oder so bekommt, weil es ihm zu lange dauert?
Wie gesagt, am Router und der Firewall liegt es definitiv nicht, das hab ich erfolgreich getestet.
Danke schon mal für eure Antworten
wie der Titel schon sagt hab ich ein Client/Server Programm geschrieben, dass bis jetzt jedoch nur übers LAN funktioniert. Gibs da irgendein Trick, oder Fehler der sich einschleichen kann?
Natürlich ist der Port freigeschalten (getestet und funktioniert) und Firewall ist auch aus.
Hier mal der Code:
Client:
Code: Alles auswählen
Port = 6980
ConnectionID = OpenNetworkConnection("localhost", Port)
If ConnectionID
; Debug "verbunden"
Repeat
Delay(1)
*Buffer = AllocateMemory(1024)
Select NetworkClientEvent(ConnectionID)
Case 0
Case 2
TCPBufferLength = ReceiveNetworkData(ConnectionID, *Buffer, 1024)
text.s = PeekS(*Buffer,TCPBufferLength)
ReceiveCheck()
EndSelect
FreeMemory(*Buffer)
Until quit = 1
EndIf
End
Code: Alles auswählen
Repeat
*Buffer = AllocateMemory(5000)
SEvent = NetworkServerEvent()
ClientID = EventClient()
EventID = WindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_List
SendString()
Case #Button_Download
dateiname.s = GetGadgetText(#String_Directory)+GetGadgetItemText(#ListIcon,GetGadgetState(#ListIcon))
SendNetworkString(ClientID,"/FILE/"+dateiname.s)
EndSelect
EndIf
Select SEvent
Case 1
AddGadgetItem(#ListIcon,-1,"Client verbunden")
Case 2
If ReceiveNetworkData(ClientID, *Buffer, 1024)
text.s = PeekS(*Buffer)
ReceiveCheck(text.s)
Else
AddGadgetItem(#ListIcon,-1,"Daten konnten nicht empfangen werden")
EndIf
Case 3
ndateiname$ = "D:\purebasic\"+Right(dateiname.s,Len(dateiname.s)-2)
If ReceiveNetworkFile(ClientID,ndateiname$)
Debug "Datei übertragen: "+ndateiname$
EndIf
Case 4
AddGadgetItem(#ListIcon,-1,"Clientverbindung verloren")
EndSelect
Delay(1)
FreeMemory(*Buffer)
Until EventID = #PB_Event_CloseWindow
End
Mir fallt auf, dass der Client, wenn ich eine Internet-IP eintrage ewig braucht bis merkt, dass er sich nicht verbinden kann, und sich schließlich beendet. Wenn ich jedoch localhost, oder eine IP im Netzwerk eingebe, verbindet er sich in Sekundenschnelle.
Ist ja auch klar, dass er übers Internet länger braucht, aber kann es z.B. sein, dass der Client eine Zeitüberschreitung oder so bekommt, weil es ihm zu lange dauert?
Wie gesagt, am Router und der Firewall liegt es definitiv nicht, das hab ich erfolgreich getestet.
Danke schon mal für eure Antworten