UDP verbindung mit BNetEx
Übersicht BlitzMax, BlitzMax NG Allgemein
Mathias-KwiatkowskiBetreff: UDP verbindung mit BNetEx |
So, Jan 13, 2013 21:57 Antworten mit Zitat |
|
---|---|---|
jo wie soll ich anfangen,
habe ein problem oder auch nicht...^^ irgendwas stimmt nicht, nur was. also ich habe ein server und nen clienten geschrieben, der client macht nichts anderes ausser 1 mal die sekunde ein hallo an dem server zu senden. funktioniert auch (Global oder nenn wir es eine internetverbindung), schliesst man nun den clienten. läuft mein server weiter, und wartet eigentlich nur auf ankommende daten, starte ich nun den gleichen client wieder, kann keine verbindung mit dem server hergestellt werden. warum nicht? also wir halten fest, server läuft client hat die ip vom server und auch den port der freigegeben ist auf dem router. starten das programm. alles funktioniert wunderbar client sendet 1 mal die sekunde ein hallo server bekommt das hallo und printet es. wir beenden den client. starten nach kb 30 sek den clienten erneut. und der client kann keine verbindung mit den server mehr herstellen. nun was ich getan habe: habe den port beim server geändert, somit connectet der client nun auf dem neuen port. und diesen wieder im router freigegeben. starte den clienten, und ja es kommt wieder was an, nachm schliessen des clienten und ein neustart des clienten funktioniert es wieder nicht. wo ist das problem, ich nutze windows 7 . ich habe eine direckte ip, vom server (Internet ip) eingegeben, diese hat sich in der zeit auch nicht geändert. habe es überprüft. meine frage lautet nun... muss der server irgendwie sich vom client lösen? bevor der client wieder auf dem server connecten kann? |
||
Hummelpups |
So, Jan 13, 2013 23:20 Antworten mit Zitat |
|
---|---|---|
Nein, UDP ist ein Verbindungs/Sitzungsloses Protokoll
und die Pakete werden einfach blind an die Zieladresse gesendet. Funktioniert dein Code denn im LAN ohne die Internetschnittstelle? |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Mathias-Kwiatkowski |
So, Jan 13, 2013 23:32 Antworten mit Zitat |
|
---|---|---|
also er funktioniert sowohl lan als auch internet gleich, naja wie kanns auch anders sein.
netzwerk is netzwerk^^ egal ob global, oder local. ich find es nur interessant. sehr sogar... und wüsste gern woran es scheitert. vorallem, hat es in der vergangenheit mit dem modul so toll hingehaun. bzw. macht es immernoch, nur halt, nach jedem neustart des clienten port switch ^^ also komplett umändern, und das is bei mir so. und auch bei 2 weiteren kollegen den ich einfach die exe geschickt habe. die kommen auf mein server rauf "server ... mein lokaler rechner" und ja funtzt, sobald sie das prog schliessen und neustarten ... nichts... |
||
BtbN |
Mo, Jan 14, 2013 1:25 Antworten mit Zitat |
|
---|---|---|
Vermutlich schlägt einfach das binden an den Port fehlt, weil du ihn im alten Client nicht wieder geschlossen hast und er somit noch belegt ist. | ||
Mathias-Kwiatkowski |
Mo, Jan 14, 2013 1:33 Antworten mit Zitat |
|
---|---|---|
ok wie kann ich den dan schliessen?
( vom alten client ) und muss das auf serverseite geschehen oder clinet seite? falls keine verbindung aufgebaut werden kann, hab ich das hier Code: [AUSKLAPPEN] If (MilliSecs() - ServerReconnectTimer) > 999 * 5 Then
If Stream Then Stream.Close() Stream.SetRemoteIP(TNetwork.IntIP(DottedIP(HostIp(ServerIP)))) Stream.SetRemotePort(4112) WriteInt Stream, 0 'Bedeutet naricht kommt an WriteLine Stream, "Hallo WELT!" AusgangBytes = AusgangBytes + Stream.SendMsg() ServerReconnectTimer = MilliSecs() EndIf das ganze habe ich eingebaut aber irgendwie.... wie gesagt jeder client kann maximal einmal connecten. ps. es können auch 3 clients drauf (auf dem server) es kommt von allen 3 auch was an. aber sobald ein client schliesst laufen 2 weitere weiter ... kommt der client der geschlossen hat wieder "online" kommt er nicht durch ... |
||
- Zuletzt bearbeitet von Mathias-Kwiatkowski am Mo, Jan 14, 2013 1:37, insgesamt einmal bearbeitet
BtbN |
Mo, Jan 14, 2013 1:33 Antworten mit Zitat |
|
---|---|---|
Einfach den socket zu machen vorm beenden halt. | ||
Mathias-Kwiatkowski |
Mo, Jan 14, 2013 1:37 Antworten mit Zitat |
|
---|---|---|
meinst du so wie im edit?
es muss auf jedenfall etwas am clienten sein. den jede ip kann nur einmalig connecten, wenn die leute ihren roouter aus und wieder an machen funktioniert es auch wieder, |
||
Hangman |
Mo, Jan 14, 2013 8:04 Antworten mit Zitat |
|
---|---|---|
BlitzMax: [AUSKLAPPEN] If (MilliSecs() - ServerReconnectTimer) > 999 * 5 Then Das hat zwar nicht unmittelbar etwas mit deinem Problem zu tun, aber... Erst schließt du den Stream und danach willst du etwas an den Stream senden. Das kann nicht funktionieren. |
||
Ich habe Berthold gebrochen. |
Mathias-Kwiatkowski |
Mo, Jan 14, 2013 10:00 Antworten mit Zitat |
|
---|---|---|
ok, wie kann ich dann den socket zu machen?
ich mein stream.close() <- ist es ja scheinbar nicht. |
||
Hangman |
Mo, Jan 14, 2013 12:56 Antworten mit Zitat |
|
---|---|---|
stream.close() ist schon richtig.
Deine "Reconnect"-Funktion funktioniert nicht, weil ein Stream.Init() noch fehlt, aber das erklärt noch nicht warum die Verbindung nicht funktioniert, wenn du den Client neustartest. Falls du bereit wärst den kompletten Source von Server und Client hochzuladen, würde ich mal schauen wo das Problem liegt. Und BtbN hat Folgendes geschrieben: Vermutlich schlägt einfach das binden an den Port fehlt, weil du ihn im alten Client nicht wieder geschlossen hast und er somit noch belegt ist.
Normalerweise wird der Port wieder freigegeben, wenn das Programm geschlossen wird. Aber das lässt sich ganz leicht überprüfen, da die Portsetzfunktionen True oder False zurückliefern. Nach Mathias's Code zu urteilen arbeitet der Client mit einem dynamischen Port (so wie es sein sollte), von daher würde es auch funktionieren, falls der alte Port aus mysteriösen Gründen noch belegt sein sollte. |
||
Ich habe Berthold gebrochen. |
Hummelpups |
Mo, Jan 14, 2013 13:45 Antworten mit Zitat |
|
---|---|---|
BlitzMax: [AUSKLAPPEN] If (MilliSecs() - ServerReconnectTimer) > 5000 Then Na dann probier das doch mal |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Hangman |
Mo, Jan 14, 2013 13:55 Antworten mit Zitat |
|
---|---|---|
Ich denke das soll eine Reconnect-Funktion des Clients sein, von daher wäre der korrekte Code dafür eher:
BlitzMax: [AUSKLAPPEN]
|
||
Ich habe Berthold gebrochen. |
BtbN |
Mo, Jan 14, 2013 15:21 Antworten mit Zitat |
|
---|---|---|
Ja, geschlossen wird er, aber meiner Erfahrung nach nicht sofort. Nach ein paar minuten sollte er aber wieder frei sein. | ||
Mathias-Kwiatkowski |
Mo, Jan 14, 2013 16:09 Antworten mit Zitat |
|
---|---|---|
also hier der client eigentlich kleiner code.
Code: [AUSKLAPPEN] Global Socket:TSocket
Global StreamTCP:TStream Global Stream:TUDPStream Stream = New TUDPStream If Not Stream.Init() Then Throw("Can't create socket") Stream.SetRemoteIP(TNetwork.IntIP(DottedIP(HostIp(Server)))) Stream.SetLocalPort() Stream.SetRemotePort(41121) Global Timer:Int = MilliSecs() Graphics 800, 600 Repeat If (MilliSecs() - Timer) > 999 Then WriteInt Stream, 0 WriteLine Stream, "Hallo WELT!" Timer = MilliSecs() End If Until KeyDown(KEY_ESCAPE) End so es funktioniert auch (wenn man die serverip eingibt ), das reconnect, brauch ich eigentlich nicht... war nur so ein versuch. naja mit dem kleinen code fing alles an. solang das prog aktiv ist, sendet er tatsächlich dinge zum server, auch vom kollegen aus, also server zugrif ist möglich, beendet man den client aber, und startet den nochmals, kommt man nicht mehr auf dem server drauf. mysteriös.... |
||
Hangman |
Mo, Jan 14, 2013 18:02 Antworten mit Zitat |
|
---|---|---|
Ich nehme mal an, du hast beim Copy-Pasten das stream.sendMsg() vergessen
Also ich sehe ansonsten keinen Fehler in deiner Clientversion und ich habe mir mal schnell einen passenden Testserver geschrieben: BlitzMax: [AUSKLAPPEN]
Ich kann da so oft hintereinander connecten wie ich will... wie erwartet. Auch mit zich Clients gleichzeitig kein Problem. Her mit dem Servercode bitte |
||
Ich habe Berthold gebrochen. |
- Zuletzt bearbeitet von Hangman am Mo, Jan 14, 2013 18:09, insgesamt einmal bearbeitet
Mathias-Kwiatkowski |
Mo, Jan 14, 2013 18:07 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] Global Socket:TSocket
Global StreamTCP:TStream Global Stream:TUDPStream Stream = New TUDPStream If Not Stream.Init() Then Throw("Can't create socket") Stream.SetRemoteIP(TNetwork.IntIP(DottedIP(HostIp(Server)))) Stream.SetLocalPort() Stream.SetRemotePort(41121) Global Timer:Int = MilliSecs() Graphics 800, 600 Repeat If (MilliSecs() - Timer) > 999 Then WriteInt Stream, 0 WriteLine Stream, "Hallo WELT!" Stream.SendMsg() ' <-------------------------------- Timer = MilliSecs() End If Until KeyDown(KEY_ESCAPE) End ähm ja in live ist es drin... aber wie gesagt das problem habe ich immernoch, jedenfalls mit globaler ip mit localer ip, geht es ohne probleme... was kann es sein, ich weiss nicht wie ich ein fehler suchen soll wenn ich nicht weiss wo ich beginnen soll. und warum gehts einmal, aber kein 2 mal mehr ? das ist doch mehr als komisch.... |
||
Hangman |
Mo, Jan 14, 2013 18:14 Antworten mit Zitat |
|
---|---|---|
Ach mit lokaler IP geht auch das Mehrfachconnecten?
Das war mir jetzt nicht so klar, dann siehts ja eher nach Router-/Firewallproblematik aus, und da kenn ich mich dann nicht mehr so aus. Ich habe bei mir die Ports geöffnet für meine Projekte und damit noch nie Probleme gehabt (mit globaler IP übers Netz). |
||
Ich habe Berthold gebrochen. |
Mathias-Kwiatkowski |
Mo, Jan 14, 2013 18:39 Antworten mit Zitat |
|
---|---|---|
ich bis jetzt auch nicht.
also wäre es ein router konflickt, würde keiner drauf kommen und es würde keiner mehr connecten können. nichtmal 1 mal! und einmal geht ja. das 2. mal nicht mehr. aber kanns sein das mein kollege mit dem ich es getestet habe, vieleicht ein windows problem hat? oder eine harte firewall? die den client als vertrauensunwürdig erkennt? ja das es local geht habe ich auch erst vor paar stunden herrausgefunden.... ich selber, habe ein weiteres netzwerk, und komme auch immerwieder drauf (global) |
||
Hangman |
Mo, Jan 14, 2013 18:41 Antworten mit Zitat |
|
---|---|---|
Teste es mit einer weiteren Person | ||
Ich habe Berthold gebrochen. |
Hummelpups |
Mo, Jan 14, 2013 22:16 Antworten mit Zitat |
|
---|---|---|
Mathias-Kwiatkowski hat Folgendes geschrieben: also wäre es ein router konflickt, würde keiner drauf kommen
zuvor: Hummelpups hat Folgendes geschrieben: Funktioniert dein Code denn im LAN ohne die Internetschnittstelle?
Mathias-Kwiatkowski hat Folgendes geschrieben: also er funktioniert sowohl lan als auch internet gleich, naja wie kanns auch anders sein.
netzwerk is netzwerk^^ egal ob global, oder local. |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
Übersicht BlitzMax, BlitzMax NG Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group