Probleme mit TCP?
Übersicht

bruce85Betreff: Probleme mit TCP? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
beim Server stelle ich z.B. eine beliebige SpielerAnzahl ein und wenn ein Client Connected, dann soll der Server die SpielerAnzahl an den Clienten schicken. Irgendwie funktioniert das nicht so wie ich es versucht habe, sobald ein Client Connected ist und ich beim Clienten mit ReadLine etwas auslesen möchte, dann hängt sich das Fenster beim Clienten auf. Hier mal mein Code: BlitzMax: [AUSKLAPPEN] If Server = 1 Then Weiss Vielleicht jemand was ich da falsch gemacht habe? Ich bedanke mich schonmal im Voraus. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bin dein Code nur grob überflogen aber wenn du Integer's verschickst dann nich per Write/Read- Line, sende Sie dann nur mit Write/Read Int. Ist eindeutiger und erzeugt keine Redundanzen, erspart dir das Casten.
mfg. c64 |
||
Betreten verboten! Kinder haften für ihre Eltern! |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank.
Das Verbinden zum Server funktioniert, aber sobald ich etwas zum Clienten schicken möchte, dann hängt sich das Fenster vom Clienten auf. Der Stream ist in Type gespeichert und sobald der Server die Verbindung vom Clienten aktzeptiert hat, dann speicher ich den Stream in Type. So schreibe ich dann in den Stream von den Clienten: BlitzMax: [AUSKLAPPEN] 'Server und so habe ich es testhalber mal getestet ob der Stream angekommen ist beim Clienten: BlitzMax: [AUSKLAPPEN] 'Client Sobald ich beim Clienten etwas vom Stream auslesen möchte, dann hängt sich das Fenster sofort auf. Ich wäre euch sehr dankbar, wenn mir jemand weiterhelfen könnte. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe jetzt noch ein Delay eingebaut und jetzt hängt sich das Programm auch nicht mehr auf.
BlitzMax: [AUSKLAPPEN] 'Client Aber irgendwie empfängt der Client keine Daten vom server, wieso eigentlich? Muss ich den Stream Vielleicht neu einlesen oder so? Edit: Jetzt funktioniert das empfangen, nur erreiche ich nie das ende der Stream und somit habe ich eine endlos-schleife und dann hängt sich mein Programm auf: BlitzMax: [AUSKLAPPEN] While Not Eof(TCP_STREAM) Was habe ich falsch gemacht? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das ist wohlmöglich ein Bug in BlitzMax, habe diesen Code umgeschrieben für Blitz Basic und dort funktioniert es ohne probleme.
Ich sitze schon seit mehrere Stunden/Tage und versuche einfach nur etwas vom Stream auszulesen, den der Server geschickt hat. In BlitzMax hängt sich das Fenster sofort auf wenn ich While Not Eof(Stream) benutze. Naja, wie es aussieht kann mir da keiner weiterhelfen, ich werde einfach mit Blitz Basic weiter machen da es dort ja funktioniert. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Lastmayday |
![]() Antworten mit Zitat ![]() |
---|---|---|
guten morgen!
also mit dem standart Modul komme ich auch nicht klar. dieses hier habe ich zurzeit in verwendung und bin ganz zufrieden. für ein server - client spiel habe ich den code soweit modifiziert: um ein "packet" zu versenden muss erst ein byte versendet werden der die größe des "packets" angibt. Es muss komplet verarbeitet werden oder zumindest bis zum nächsten verworfen werden. (und write line für zahlen zu benutzen ist extrem performance raubend) ![]() Server: BlitzMax: [AUSKLAPPEN] SuperStrict Client: BlitzMax: [AUSKLAPPEN] SuperStrict mfg Lastmayday |
||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sagte ich bereits und trotz Danke fand es siehe Code kein Gehör ![]() |
||
Betreten verboten! Kinder haften für ihre Eltern! |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die antwort.
Ich wollte es eigentlich ohne Netzwerk Modul machen. Hier ist mal ein Teil von meinem Code: BlitzMax: [AUSKLAPPEN] Function Multiplayer() An dieser Position BlitzMax: [AUSKLAPPEN] While Not Eof(TCP_CLIENT_STREAM) bleibt die Schleife einfach hängen. Naja, wenn jemand ein Fehler sieht wieso die schleife unendlich durchläuft, dann wäre ich euch sehr dankbar. Ansonsten wenn ich das nicht hinbekomme, dann verwende ich einfach das Netzwerk Modul. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo nochmal.
wenn ich das BNet Modul in meinem Project einbinde, dann kennt er die Standard befehle nicht mehr, er sagt z.B. Identifier 'TImageFont' not found oder Identifier 'TImage' not found u.s.w. BlitzMax: [AUSKLAPPEN] SuperStrict woran könnte das denn liegen? MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn du ein Framework benutzt, musst du alle nötigen Module mit Import dazuladen. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Lastmayday |
![]() Antworten mit Zitat ![]() |
---|---|---|
genau wie Xeres sagte: (kleines beispiel)
BlitzMax: [AUSKLAPPEN] Framework brl.math du kannst leicht herausfinden welches modul fehlt indem du die angezeigte funktion in der bmax hilfe suchst und dann auf der modul seite GANZ oben dir die erste zeile anschaust: "brl.xxx: Functions source" dann einfach die brl.xxx importen und fertig. =) falls du auf meinem beispiel versuchen soltest etwas aufzubauen muss ich leider sagen das ich ein paar fehler drin hatte. (eine variable war im server auf global gesetzt, die in die type gehört und eine abfrage in schleifenform ist unnötig, was mehr geschwidigkeit bringt) dieses hier ist jetzt up to date. Client: BlitzMax: [AUSKLAPPEN] SuperStrict server: BlitzMax: [AUSKLAPPEN] SuperStrict |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich danke euch beiden.
Jetzt funktioniert das endlich. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo nochmal,
ich habe nur noch ein kleines Problem und zwar, wenn ich ein Client lösche, dann werden alle Clients gelöscht, wenn ich nur den letzten Client aus TList lösche, dann wird nur das letzte gelöscht ansonsten werden immer alle Clients gelöscht, wieso eigentlich? Code: [AUSKLAPPEN] For Client = EachIn Clients
If Client.GetState() <> 1 Then For Local i:Int=0 To SpielerAnzahl-1 If Spieler[i].Port = Client.GetLocalPort() Then Spieler[i].Joined = 0 Spieler[i].Bereit = 0 Spieler[i].Port = 0 For Client = EachIn Clients Client.WriteLine("5") For Local j:Int=0 To SpielerAnzahl-1 Client.WriteLine(Spieler[j].Joined) Client.WriteLine(Spieler[j].Bereit) Client.WriteLine(Spieler[j].Port) Next While Client.SendMsg() ; Wend Next Exit EndIf Next WriteStdout("Client disconnected:~n" + .. " - IP:" + TNetwork.StringIP(Client.GetLocalIP()) + "~n" + .. " - Port:" + Client.GetLocalPort() + "~n") Client.Close() Clients.Remove(Client) Continue End If ............. ............. ............. Dafür habe ich ja die for Schleife die jede Client durchgeht und dementsprechend diesen Client aus TList zu löschen, leider funktioniert das nicht so richtig. Danke schonmal. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Lastmayday |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi!
vor 'WriteStdout("Client disconnected:~n" + ..' ein 'else' setzen und 'If Client.GetState() <> 1 Then' durch 'If Client.GetState() = 1 Then' ersetzen. MfG Lastmayday |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der gesamte Codeblock soll ausgeführt werden, wenn ein Client gelöscht wird, deshalb würde ich eher sagen 'else' vor 'For Local i:Int=0 To SpielerAnzahl-1', leider hat das auch nix geholfen.
Naja, dann werde ich es ambesten alles in einem Type packen und mit Types versuchen. Im Moment stehen die Clients nur in einem TList Object und ich vermute das es Vielleicht dadran liegen könnte. BlitzMax: [AUSKLAPPEN] Global IP : Int, .. Ich danke Dir trotzdem für die Hilfe. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
Mal ganz ehrlich, du hast ein Problem mit den standard Befehlen gehabt und bei diesen einen Bug vermutet ?! Dann wurde dir geraten BNETEX zu nutzen was an und für sich garnicht verkehrt ist allerdings benutzt BNETEX genau die Befehle die du für verbugt hältst. Klar ist es gut ein Problem zu umgehen, aber damit ist ja die eigtl. Problematik nicht gelöst, und wenn BnetEX die Standard Befehle nutzt, sollte man nich dann davon ausgehen das diese funktionieren? Und zu deiner Schleife ich weiss ja nicht was mit >if GetState() <> 1< bezweckt werden soll aber alles was GetState()<>1 zurückliefert wird in deiner Schleife gelöscht. Jetzt vermutest du TLIST und wirst was anderes nehmen, was ist wenn dir mal die Optionen ausgehen? Geh doch mal ein Problem an anstatt es zu umgehen ?! ![]() Bekomm das jetz nich in den falschen Hals auch wenn sich das vllt. n bisl provokant liesst ist wirklich nicht meine Absicht! Will dir nur n kleinen "Tritt" geben ![]() mfg. C64 |
||
Betreten verboten! Kinder haften für ihre Eltern! |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast recht, aber wenn ich nach etliche Stunden/Tagen das Problem nicht lösen kann, dann versuch ich einfach eine andere Methode zu finden.
Ich habe das Problem jetzt doch lösen können: BlitzMax: [AUSKLAPPEN] For Client = EachIn Clients Ich prüfe zuerst welcher Client die verbindung unterbrochen hat und dann lösche ich diesen Client in dieser Zeile: BlitzMax: [AUSKLAPPEN] If Spieler[i].Port = Client.GetLocalPort() Then Ich danke Dir trotzdem für die antwort. MfG |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
Lastmayday |
![]() Antworten mit Zitat ![]() |
---|---|---|
Abend,
nun wenn man deinen Code lange anstarrt und darauf achtet bloß keine For schleife auszulassen, versteht man erst was gemeint war. Wenn ich in der ersten Zeile 'For Client = EachIn Clients' lese und irgendwo in der selben schleife nochmal 'For Client = EachIn Clients' steht, blickt absolut keiner mehr durch. Was ich gelesen hab war 'If Client.GetState() <> 1 Then' , was bedeutet das der Client disconnected ist und mitten drin dann 'Client.WriteLine(Spieler[j].Joined)' was total unlogisch ist. tu dir selbst ein gefallen und deklariere For schleifen mit listen auch mit einem 'local clients:wasauchimmer' , bei schleifen in schleifen geht das sogar nicht anders. Danke. mfg Lastmayday |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group