BennIY Geschrieben 4. Dezember 2016 Melden Share Geschrieben 4. Dezember 2016 Guten Abend, ich habe seit einiger Zeit ein Problem bei meinem Multiplayer Setup. Ich erzeuge hier eine neue Verbindung: public static bool ConnectToServer() { socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(serverIP), 4242); try { socket.Connect(ipe); networkState = NetworkState.Connected; return true; } catch { networkState = NetworkState.NoResponse; } return false; } Unity zeigt mir auch als NetworkState Connected an. Wenn ich aber nun die Methode aufrufen um den RX Buffer auszulesen hängt sich Unity während des Spielt auf und lässt sich nurnoch mit dem Taskmanager beenden. byte[] Buffer; int readBytes; Buffer = new byte[socket.SendBufferSize]; readBytes = socket.Receive(Buffer);//Stop Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 4. Dezember 2016 Melden Share Geschrieben 4. Dezember 2016 Zeige bitte mal die ganze Methode ... könnte eine Speicherverletzung sein oder einfach eine Endlosschleife. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 5. Dezember 2016 Melden Share Geschrieben 5. Dezember 2016 https://msdn.microso...4y8aff(v=vs.110).aspx: If no data is available for reading, the Receive method will block until data is available, unless a time-out value was set by using Socket.ReceiveTimeout. Blockiert wohl einfach. In solchen Fällen starte ich meistens einen weiteren Thread, der dann das Lesen übernimmt. http://www.albahari.com/threading/ Also ein Thread der aus dem Socket Daten bekommt und in eine Variable schreibt. Der Main Thread ( also Unity in Update() z.B.) kann dann auf diese Variable zugreifen, sie eventuell schnell kopieren und dann weiterarbeiten mit den neuesten Daten. Alternativ zum kopieren geht auch ein lock object: http://www.albahari.com/threading/ auch hier Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
BennIY Geschrieben 5. Dezember 2016 Autor Melden Share Geschrieben 5. Dezember 2016 Ist richtig das war in einem Thread aber ich dachte ich schreibs in die Update. Ich probiere nochmal den Thread. Heißt das, die Funktion geht in eine Schleife über bis Daten empfangen werden? Scheint zu funktionieren, auf der Basis kann ich weiter arbeiten, dank dir. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 5. Dezember 2016 Melden Share Geschrieben 5. Dezember 2016 Ist richtig das war in einem Thread aber ich dachte ich schreibs in die Update. Ich probiere nochmal den Thread. Heißt das, die Funktion geht in eine Schleife über bis Daten empfangen werden? Scheint zu funktionieren, auf der Basis kann ich weiter arbeiten, dank dir. Ja, da ist im Hintergrund sowas wie: while(datareceived<=0) { Thread.Sleep(1); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.