Hilfestellung: WPF Socket Server/Client

Grolvar

Grünschnabel
Guten Abend liebe Community,

Ich bin derzeit dabei, eine Anwendung zu schreiben, welche nach ihrer Benutzung ein paar Strings und Integer ausgibt, welche dann an eine andere Anwendung gesendet werden sollen, damit dieser dann seine Benutzung mit diesen Daten fortsetzten kann.

Im Grunde eine Art Minesweeper rundenbasiert.

Nun fällt es mir allerdings sehr schwer, eine Verbindung zu einem anderen Rechner aufzubauen und aus den Tutorials die man bei Tante Google unter den Begriffen "C# Socket Programming" etc. helfen mir derzeit auch net groß weiter bzw. ich verstehe es nicht so ganz.

Kann mir vielleicht jemand helfen und ggf. eine Art Vorlage bieten, welche ich abgeleitet verwenden könnte.

Wichtig dazu wäre zudem noch, dass die Anwendung WPF als grafische Oberfäche nutzt.
Es wäre toll wenn man über ein (bereits bestehendes) Menu ein MenuItem hinzufügen kann welches dann den Server startet bzw. über welches man einem vorhandenen beitreten kann (Click Event).



Meine derzeitigen Versuche bestehen darin, dass ich ein Fenster öffne, welches die Buttons "Erstellen" und "Beitreten" beinhaltet. Des weiteren eine TextBox für die IP eingabe.

Nachdem ich zB. Erstellen drücke erstelle ich einen Thread(Ist das notwendig bei nur 2 Anwendern?) welcher dann den Socket erstellt:

Code:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Nach dem Bind() und Listen() warte ich dann auf den anderen Anwender und sobald dieser verbindet wird ein vordefiniert string übermittelt aber der Server schließt wieder bzw. wirft eine Exception wenn ich nocheinmal was senden möchte.

Hier der ganze Code von der Server.xaml.cs:

Code:
private void StartServer()
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sock.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080));
            sock.Listen(0);

            Socket ClientAccept = socket.Accept();

            byte[] buffer = Encoding.Default.GetBytes("Hallo, Test.");
            ClientAccept.Send(buffer, 0, buffer.Length, 0);

            buffer = new byte[256];

            int rec = ClientAccept.Receive(buffer, 0, buffer.Length, 0);

            Array.Resize(ref buffer, rec);

            //sock.Close();
            //sock.Dispose();
            //ClientAccept.Close();
            //ClientAccept.Dispose();
        }

        private void _StartServerButton_Click(object sender, RoutedEventArgs e)
        {
            Thread ServerThread = new Thread(new ThreadStart(StartServer));

            ServerThread.Start();

        }



Ich bedanke mich schonmal für jede Antwort.

Grüße Grolvar
 

Neue Beiträge

Zurück