komunikatr klient-server

0

Witam, otóż potrzebuję pomocy, mam napisać prosty chat w C# z użyciem gniazd, a w zagadnieniach sieciowych jak i C# nie jestem zbyt dobry
Mam takie kody, które należy zmienić tak aby klienci mogli się podłączać po server i wymieniać się wiadomościami (tak jak chat) a także prowadzić możliwość prowadzenia prywatnych rozmów.

 using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;

public class MySocket
{   
  static void Main ()
  {
    byte[] buffer = new byte[100];
    int count;

    IPEndPoint myEP = new IPEndPoint(IPAddress.Any, 2000);

   
        Socket sock = new Socket( 
            AddressFamily.InterNetwork,
            SocketType.Stream,
            ProtocolType.Tcp);

        sock.Bind(myEP); 
        sock.Listen(5); 
        Socket new_sock = sock.Accept(); 

        count = new_sock.Receive(buffer); 
        string upperString = Encoding.UTF8.GetString(buffer).ToUpper();
        
        new_sock.Send(Encoding.UTF8.GetBytes(upperString));
        Console.WriteLine(upperString);
        new_sock.Close();
        sock.Close();
        
       
  }
}

Strona klienta, nie wiem czy wymaga zmian

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Net.Sockets;



namespace client
{
    public partial class Form1 : Form
    {
        byte[] buffer;        
        Socket s; 
        public Form1()
        {
            while (true)
            {

                InitializeComponent();
                buffer = Encoding.UTF8.GetBytes(textBox1.Text);
                IPEndPoint servEP = new
                IPEndPoint(IPAddress.Parse(textBox2.Text), 2000);

                s = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);

                backgroundWorker1.RunWorkerAsync(); 

                s.Connect(servEP);
            }
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            

            s.Send(buffer);
            
            

        }


        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
        {
            s.Receive(buffer); 
         
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            string buffer1 = Encoding.UTF8.GetString(buffer);
            textBox1.Text = buffer1;
            s.Close();
        }
    }
}
0

co do prywatnych wiadomosci
Klient <-> serwer <-> klient

zrób strukturę z TCPclient i nazwą użytkownika.
potem zrobisz listę dla tej struktury i jak ktoś będzie chciał sie połaczyc wyszukasz z listy nazwe i bedziesz posrednikiem miedzy tymi socketami.

Polecam przykład z code guru :) ale pl

1 użytkowników online, w tym zalogowanych: 0, gości: 1