Entwickler-Ecke

Netzwerk - 1 Server, 2 Clients, aber nur einer kann maximal online sein


Kuehter - Do 28.05.15 16:21
Titel: 1 Server, 2 Clients, aber nur einer kann maximal online sein
Habe das Problem, dass die Kommunikation zwischen 1 Client und 1 Server klappt, nur wenn ich jetzt einen 2ten Client starte bricht er ab.
Die Fehlermeldung die ich erhalte ist:
"C# ObjectDisposedException: Verworfenes Objekt kann nicht zugegriffen werden.

Der Code wo der Fehler kommt sieht wie folgt aus:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
            try
            {
                tcpClient = tcpListener.AcceptTcpClient();
                NStream = tcpClient.GetStream();
                if (NStream.CanRead)
                {
                    BinaryWriter writer = new BinaryWriter(NStream);
                    byte[] byteStream = ImageToByteArray(StreamToImage(WebStream(CameraIP)));
                    writer.Write(byteStream);  // Fehler hier
                    NStream.Close();
                }
            }
            catch (IOException)
            {
                throw;
            }
            catch (SocketException)
            {
                throw;
            }


Dort wir der Stream einer Videokamera Übertragen, also die Verbindung geht nur vom Server rein.
Der Codeausschnitt ist nur vom Server das Empfangen vom Stream beim Client funktioniert einwandfrei


Ralf Jansen - Do 28.05.15 18:39

De Codeauschnitt ist vermutlich zu klein um eine Aussage zu treffen.

Was mich wundert ist das du den Stream scheinbar von der Camera einfach weiterwirfst. Solltest du den nicht irgendwo sauber Buffern? So wie es jetzt aussieht gibst du immer einen Teil des Stream an irgendeinen Client weiter. Somit hat dann jeder Client einen Teil des Streams aber keiner den ganzen. Fühlt sich falsch an.


Kuehter - Fr 29.05.15 06:59

doch gebuffert ist das in einem BufferedStream und das wird weiter geschickt. Nur der Stream wird einfach nicht gesendet wenn ich einen 2ten Client benutze und jeder Rechner bekommt den Stream habe ne alte Version. In der funktioniert das. Oder wüsstest du irgendwelche Snippets wie ich das machen kann das das er den Stream an beide schickt und nicht teile?

hier noch mal ein wenig mehr Code ist als Anhang mit dran


Ralf Jansen - Fr 29.05.15 14:37

Mir persönlich hat das jetzt noch nicht weitergeholfen da ein Problem zu sehen (bin aber immer noch der Auffassung das da jeder Client, sobald mehr als 1 Client geht, nur einen Teil des Streams bekommt)
Hast du einen Stack zu deiner ObjectDisposedException damit wir wissen welches Object gemeint sein könnte?