Laden...
O
Olii
myCSharp.de - Member
28
Themen
76
Beiträge
Letzte Aktivität
vor 5 Jahren
Dabei seit
20.09.2017
Erstellt vor 5 Jahren

Ganz einfach, weil ich absolut keine Ahnung habe wo ich was einsetzten kann. Ich bin überflutet mit Informationen und Möglichkeiten, das ich momentan absolut garnicht mehr weiß was mein eigentliches Problem ist. Kurzgesagt, ich bin absolut überfordert und stehe unter Zeitdruck.

Überall steht irgendetwas das mich immer wieder vermtuten lässt dass das nicht geeignet ist. Z.B .net core signalR.Client, hier steht in der Überschrift:

The ASP.NET Core SignalR .NET client library lets you communicate with SignalR hubs from .NET apps.

Ich habe weder eine asp.net /core Anwendung sonder nur eine .net core Konsolen Anwendung, noch irgendeine Kontroller über den Server, geschweige denn, was dieser überhaupt verwendet. Die Entwickler dieser Server Anwendung sind bereits in Rente und die Software kann erst Ende nächsten Jahres ersetzt werden. Keine Doku oder sonst was. Niemand weiß was das Teil so genau macht, aber alle brauchen es...

Erstellt vor 5 Jahren

Zu implementierungen von Clients mit WebSockets konnte ich bisslang leider nicht finden. Allerdings sind wohl 3 Anbieter Librarys wie WebSocket4NET wohl nicht schlecht. Dann werde ich wohl auf diese zurückgreifen und das ganze mal damit probieren.

Erstellt vor 5 Jahren

Das sind sehr gute Tipps, danke Abt!

Nur eine Frage dazu:

Weiterhin dürfte Dein Code in der Form nicht (so einfach) testbar sein, weil Du mit der konkreten Implementierung von ClientWebSocket arbeitest.

Wie kann ich das verstehen? Dafür gibt es doch den ClientWebSocket oder nich? ^^

Es gibt absolut keine Beispiele im Internet (ich habe Stunden über Stunden nur nach Informationen gesucht, kein Spaß..), weshalb ich dann einfach drauf los gebastelt habe. Auf der MS Seite war als erstes der Client kurz aufgeführt, also hatte ich damit das ganze sofort versucht. War/ist das nicht korrekt?

Irgend eine Idee wo ich was dazu finde? Ein Beispiel oder so? Wie ein WebSocket Server erstellt wird, wird einem an jeder Ecke gezeigt, aber nicht ein kleines Client Beispiel ist zu finden.
Mir fehlt einfach die Idee wie ich es anders machen soll, ich habe gerade absolut keine Vorstellung von einer anderen Sinnvollen umsetzung.

Erstellt vor 5 Jahren

Ich habe mal versucht so etwas mit WebSockets zu basteln.

Ich hab das mal hier im Forum unter Review gepostet:

mycsharp.de Code Review

Erstellt vor 5 Jahren

Hallo Leute, ich habe mich mal an Sockets versucht, um genauer zu sein mit WebSockets (System.net.Websockets).

Was ich hier versucht habe darzustellen ist eine Klasse die auf der Klasse WebSocketClient aufbaut. Diese Umsetzung sollte mir helfen damit ich sowohl Syncrone als auch Async Clients erstellen kann.

In meinem Anwendungsbeispiel habe ich die Synchrone Art verwendet da ich davon ausgehe in dem Beispiel das der Socket Server auf meine Nachricht wartet, und mir eine Antwort auf meine Nachricht schickt.

Quasi:
Send: Hallo Server, bitte Arbeite folgende Prozedur ab: <DoStuff>
Receive: Hallo Client, die Aufgabe ist erledigt, du kannst dich jetzt trennen

Ich würde gerne ein paar Rückmeldungen haben ob es Dinge gibt die ich verbessern kann oder ob ich grundlegend etwas falsch gemacht habe.

Ich würde gerne etwas daraus lernen 😃

Synchroner Aufruf:


private async void Initialize()
        {
            CustomSocketClient client = new CustomSocketClient("ws://echo.websocket.org/");

            await client.Start();

            await client.Send("Hallo das ist mein Test");

            string message = await client.Receive();
        }

Und hier die Klasse die ich mir dazu gebaut habe:

class CustomSocketClient
    {
        private ClientWebSocket client;

        private string _strAdressEndpoint { get; }
        public string _strNotifyMessage { get; set; }

        public CustomSocketClient(string strAdressEndpoint)
        {
            _strAdressEndpoint = strAdressEndpoint;
            Initialize();
        }

        private void Initialize()
        {
            client = new ClientWebSocket();
            _strNotifyMessage = "notify message";
        }

        public async Task Start()
        {
            await OpenConnection();
        }

        private async Task OpenConnection()
        {
            if(client.State != WebSocketState.Open)
            {
                await client.ConnectAsync(new Uri(_strAdressEndpoint), CancellationToken.None); //ToDo built in CancellationToken
            }
        }

        public async Task<string> Receive()
        {
            byte[] buffer = new byte[1024];
            WebSocketReceiveResult result = await client.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//ToDo built in CancellationToken

            if (result.MessageType == WebSocketMessageType.Close)
            {
                return "abort";
            }

            using (MemoryStream stream = new MemoryStream())
            {
                stream.Write(buffer,0, result.Count);
                while(!result.EndOfMessage)
                {
                    result = await client.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);//ToDo built in CancellationToken
                    stream.Write(buffer, 0, result.Count);
                }

                stream.Seek(0, SeekOrigin.Begin);
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    string message = reader.ReadToEnd();
                    return message;
                }
            }
        }

        public async Task Send(string message)
        {
            if(client.State == WebSocketState.Open)
            {
                byte[] byteContentBuffer = Encoding.UTF8.GetBytes(message);
                await client.SendAsync(new ArraySegment<byte>(byteContentBuffer), WebSocketMessageType.Text, true, CancellationToken.None); //ToDo built in CancellationToken
            }
        }
    }
Erstellt vor 5 Jahren

Danke Abt für die super Erklärung!

Das Thema ist komplizierter als ich gedacht habe. Ich dachte ich hätte es nun gerafft nach 4 Wochen aber, ich setzt mich noch einmal ran. Ich möchte das auf jeden Fall komplett verstehen. Das ist denke ich ein Thema, das man immer gut gebrauchen kann.

Da bist Du ebenfalls mit TCP viel zu tief.

Ich bin etwas schlecht darin mich richtig auszudrücken manchmal, muss ich auch noch üben 😄.
Was ich eher meinte das ich eigentlich das ich mit System.Net.Sockets arbeiten wollte. Also Client Sockets die sich zu mehrfach vom selben Programm aus mit einem SocketServer verbinden und verschiedene Dinge abarbeiten. Der Server-Socket wäre in dem Fall ein Windows-Dienst der auf einer VM läuft (existiert bereits und kann/darf nicht angepasst werden).

EDIT: Dieser Dienst ist schon uralt, aber leider noch nicht ersetzbar (von 1995). Deswegen glaube ich nicht das der Socket Server mit Websockets klar kommen würde. Websocket baut anscheinden auf dem plain Socket (TCP) auf. Aber die Server Schnittstelle müsse sowas ja dann auch verarbeiten können, wo ich mir nicht sicher bin bei einem so alten Service.

Es gibt ja noch Systems.Net.Websockets, das wird wenn ich das richtig gelesen habe in ASP.NET /Core verwendet und dachte dass das eher so für den das "richtige" Web geacht ist und ich mit meinen Basteleien nur im eigenen Netzwerk befinde.

Vielleicht gibt es da auch andere Unterschiede, ich werde mal versuchen mehr darüber herauszufinden, wann welche davon verwendet werden sollte.
EDIT: Unterschied zwischen Socket und Websockets

Was ich zu dem Thema halt von MS mir genommen habe sind die Beispiel Implementierungen von Net.Sockets, mit denen ich gerade herumspiele um zu sehen wie die funktionieren:

Async Client Socket

Erfinde keine Kommunikationsprotokolle neu, wenn Du es nicht brauchst

Selbst wenn ich es brauchen würde, wäre ich noch zu doof dafür 😄 da bin ich denke ich noch weit weg von

Danke auf jeden Fall nochmal für deine Hilfe. Ich weiß das sehr zu schätzen das du deine Zeit dafür investiert hast. Ich wünschte ich könnte irgendwas zurück geben. Mal gucken ob man hier Spenden kann.

Erstellt vor 5 Jahren

Danke für die Antwort hab. Ich finde es Klasse wie du immer noch Tipps mit der Architektur gibst, sowas ist generell echt super (mein Ausbilder weiß wahrscheinlich nicht einmal was das so genau ist anscheinend. Ich hab mir Dinge von im abgeguckt die ich hätte besser ein lassen sollen, wie z.B. alles an Logik immer hinter eine Form zu packen ^^, aber das tut hier ja nichts zu Sache).

Threads vs Tasks
So wie ich das verstanden habe sind Task die Aufgaben und Threads diejenigen die die Aufgaben ausführen. Immer wenn ich ein Task.Run mache, zeigt mir VIsual Studio an das entweder ein Threadpool thread verwendet wird oder ein neuer Thread erstellt wird. Deswegen dachte ich es macht in der Beschreibung keinen unterschied wie ich es bezeichne.

TCP Client
Eine Chat wollte eigentlich nicht machen, ich dachte mehr an eine Schnittstelle die über TCP verschiedene Aktionen ausführt wenn man diese anspricht. Oder ein TCP Endpoint der je nachdem was man sendet eine bestimmte Aktion ausführt und eine Rückantwort sendet sobald die Aufgabe abgeschlossen ist.

Und für so einen Fall wollte ich mal versuchen, dass ein Client mehrere Aktion "gleichzeitig" anstößt, ohne darauf zu warten ob ein Client Socket bereits eine Antwort vom Server erhalten hat. Ich dachte ein Extra Framework oder etwas dergleichen wäre vielleicht ein Overkill für eine "vermeindlich einfache Sache".

"Das Senden sollte an für sich schon asynchron sein"

  • Macht es denn einen unterschied wenn man das mit Task machen würde? Ich spiele gerade ein wenig herum und wenn ich einen Task verwende, läuft der ja sowieso getrennt von dem Main Thread und blockiert nicht.
Erstellt vor 5 Jahren

Hallo, ich spiele momentan mit Theads und Async Await herum, bin aber noch sehr unsicher mit diesen Themen.

Was ich gerade versuche ist folgendes:

Ich habe einen kleinen TCP Server programmiert der einfach nur Client Anfragen entgegennimmt und einen String zurück sendet.

Was ich jetzt gerne probieren möchte ist, den selben Client, mehrmals mit dem Server zu verbinden, um z.B. mehrere Prozesse gleichzeitig anzustoßen (wie gesagt nur ein Testprojekt).

Ich kann mich mit dem Server verbinden und bekomme auch den String zurück, mit dem kleinen Stück Code den ich erstellt habe:


void sendData()
        {
            master.Send(System.Text.Encoding.UTF8.GetBytes(txtMsg.Text));

            int readByte;

            byte[] Buffer = new byte[master.SendBufferSize];

            readByte = master.Receive(Buffer);
            byte[] rData = new byte[readByte];
            Array.Copy(Buffer, rData, readByte);

            string test = System.Text.Encoding.UTF8.GetString(rData);

            txtText.Text += test + Environment.NewLine;
        }

Das funktioniert auch ganz gut.

Nur was sollte man lieber benutzen für mehrere Verbindungen?
Threads: Z.B. die Methode mehrmals mit Task.Run(sendDate) ausführen

oder

Async Methoden die "einfach" "gleichzeitig" ausgeführt werden und mit z.B. einem WaitAll() am Ende abgefragt werden?

Ich habe gelesen das man mit Threads vorsichtig sein soll und bloß nicht zu viele erstellt. Mit Async passiert es allerdings ja nicht wirklich "gleichzeitig".

Hat jemand ein paar Erfahrungsberichte?

Danke von olli 😃

Erstellt vor 5 Jahren

mh da hast du vielleicht recht.

Aber ich meinte auch so dinge wie Einarbeiten. Wir sind nur zwei Entwickler im ganzen Unternehmen, da muss man sich selbst einarbeiten. Es kommen aber so viele Themen von allen Seiten, da eigentlich mehr Entwickler da sein sollten aber 2 das Unternhemen verlassen haben weil der Weg für sie einfach zu weit war und einer ist für lange Zeit krank. Somit sind so viele Aufgaben da und ich muss mehrere Themen gleichzeitig "lernen". das macht die einarbeitung schwirig da ich mich nicht auf ein Ding fokusieren kann.

Vielleicht Tipps zur Einarbeitung? Ich versuche die Themen möglichst zu sortieren und zu dokumentieren. Vielleicht hat ja jemand sowas wie Tipps für bessere Struktur? Momentan sind alles einfach OneNote Notizen, getrennt auf Tabs.

Erstellt vor 5 Jahren

Hallo lieber User,

ich hätte mal hier eine recht allgemeine Frage an alle: Wie wird mein ein besserer Informatiker?

Was meine ich damit?

Um genau zu seien meine ich, wie man Dinge lernt, wie z.B. logisches Denken, Prozesse miteinander Verknüpfen, allgemeines verstehen von Prozessen etc. etc. etc. etc. nicht nur das Programmieren sonder alles drum herum mit inbegriffen. Einfach Programmieren hilft da nicht so ganz..

*Side Info warum ich frage, für manche vielleicht uninteressant:*

Es ist so, ich habe vor kurzem meine Ausbildung zum Fachinformatiker für Anwendungsentwicklung recht gut beendet. Nur das Unternehmen wo ich die Ausbildung gemacht habe war eher mangelhaft, weshalb ich versucht habe mir zuhause möglichst viel beizubringen.

Allerdings habe ich jetzt meinen ersten Job in einem anderen Unternehmen angefangen und fühle mich so als wäre ich zu "schlecht" oder das ich Dinge einfach nicht so schnell aufgreifen kein.

Es gibt super viel zu lernen hier, von Prozessen bis zu einer neuen Programmiersprache und einer risigen Datenstruktur. Ich fühle mich so als ob ich das einfach alles nicht verstehen kann. Ich muss häufiger das gleiche Fragen weil ich immer wieder mit Informationen durcheinander komme. Obwohl ich versuche mich in den Gesprächen wenn mir etwas erklärt wird, voll zu konzentrieren, gehen mir trotzdem so viele Informationen "in ein Ohr rein und in das andere wieder raus".

Ich will es umbedingt schaffen hier zu bleiben nach der Probezeit. Die Mitarbeiter sind top und das Unternehmen ist auch gut (im alten Unternehmen wurde man wie ein niederer Mitarbeiter behandelt und wurde sogar von den meisten Mitarbeitern beleidigt. Ich meine richtig fertig gemacht, das ist hier nicht so und deshalb will ich mein bestes geben.

Wer also irgendwelche Tipps hat, Blogs, Beiträge, Angewohnheiten die man lernen sollte, egal was es ist, hat... bitte her damit.

Ich bin schon die ganzen Monate am lesen wie ich Konzentration verbessern kann und so verschiedene Dinge. Aber ich bin nicht da wo ich mich wohlfühle mit meinem Wissen oder "Können".

Ich danke allen die hier posten sehr, für die ganze Unterstützung und das vermittelte Wissen 😃)))

10 von 76 Beiträgen