huuuuuh hat folgendes geschrieben : |
zu Frage 1: Mehrmals senden mit einem Socket geht. Frag mich bitte nicht, wie^^ wie sieht denn die Exception aus?
zu Frage 2: Das Problem dabei ist, dass immer etwas "empfangen" wird, selbst wenn nichts da ist. d.h., das empfangene ist leer. Denn die Antwort ist ja nicht sofort da, sondern braucht nen paar Millisekunden zum Server und zurück. Direkt nach dem senden ist die Antwort noch nicht da, das empfangene also leer.
Du hast jetzt 2 Möglichkeiten:
*Thread.Sleep(); nutzen, um nach dem senden kurz zu warten.
*Das empfangen in einer Schleife ablaufen lassen und warten bis etwas da ist. Schlägt allerdings ziemlich auf die CPU-Auslastung.
Oder du arbeitest mit dem TcpClient und NetworkStream... (was eine ganz andere, 3. Möglichkeit wäre) |
Danke schön, huuuuuh.
Meine Exception lautet "Make sure you have not released a resource before attempting to use it". Das kann man dadurch lösen, dass man am Ende keine socket.Close() macht. Aber so wird meine Verbindung immer geöffnet und ich möchte das nicht. In der Beschreibung zur Close() steht, dass dadurch geöfnete Verbindung geschlossen wird und alle Resources befreit werden. Welche Methode kann ich danach aufrufen damit man mit dem bestehenden Socket eine neue Verbindung aufbauen kann? Ich habe probiert Bind(endPoint). Das hat nix gebracht.
Ich habe es mit dem Empfang nicht ganz verstanden. Bei mir passiert das Folgendes. Wenn die Zeile
int receivedDataLength = client.Receive(data);
erreicht wird, weiter passiert nichts. Du sagst, dass
| Zitat: |
| immer etwas "empfangen" wird |
Wieso läuft mein Programm dann nicht weiter mit receivedDataLength = 0?
Wenn ich das mit der Schleife realisiere, wie kann ich dann das Empfang testen, wenn client.Receive(data) blockiert wird?
Für Thread.Sleep() hab ich 30*1000 ms gesetzt. Das Ergebnis war gleich. Es wird beim Receive blockiert.
(Sleep rufe ich vor Receive.)
Nun probiere ich TcpClient.