Problem z dwustronną komunikacją klient serwer

0

usiłuje zrobić prosty program klient serwer wysyłający wiadomości tekstowe. Udało mi się aby klient wysyłał wiadomość do serwera a ten ją odczytywał ale chce żeby możliwa była wymiana wiadomości.Próbowałem do tego celu użyć drugiego wątka ale niestety, mój kod:
serwer:

 
        static byte[] buffer { get; set; }
        static Socket sck, acctepted;
        static Thread watek;
        static void Main(string[] args)
        {
            watek = new Thread(funckjaWatka);
            watek.Start();
            sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            sck.Bind(new IPEndPoint(0, 8000));
            sck.Listen(100);

            acctepted = sck.Accept();
            while (true)
            {
                buffer = new byte[acctepted.SendBufferSize];
                int bytesRead = acctepted.Receive(buffer);
                byte[] formatted = new byte[bytesRead];
                for (int i = 0; i < bytesRead; i++)
                {
                    formatted[i] = buffer[i];
                }
                string data = Encoding.ASCII.GetString(formatted);
                if (data.EndsWith("close")) break;
                Console.WriteLine(data);
            }
            Console.WriteLine("Klient zakończył połączenie");
            Console.Read();
            watek.Abort();
        }

        static void funckjaWatka()
        {
            while (true)
            {
                string text = Console.ReadLine();
                text = "Serwer: " + text;
                byte[] data = Encoding.ASCII.GetBytes(text);
                acctepted.Send(data);                
            }
        }

klient:

static Socket sck;
        static Thread watek;
        static void Main(string[] args)
        {
            
            Console.Write("imie:");
            string imie = Console.ReadLine();
            sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            watek = new Thread(funkcjaWatka);
            while (true)
            {
                try
                {
                    sck.Connect("127.0.0.1", 8000);
                    break;
                }
                catch
                {
                    Console.WriteLine("blad polaczenia, probujemy ponownie ... ;)");
                }
            }
            while (true)
            {
                string text = Console.ReadLine();
                text = imie + ": " + text;
                byte[] data = Encoding.ASCII.GetBytes(text);
                sck.Send(data);
                if (text.EndsWith("close")) break;
            }
            watek.Abort();
            sck.Close();
            Console.Read();
        }

        static void funkcjaWatka()
        {
            while (true)
            {
                sck.Listen(100);
                byte[] buffer = new byte[sck.SendBufferSize];
                int bytesRead = sck.Receive(buffer);
                byte[] formatted = new byte[bytesRead];
                for (int i = 0; i < bytesRead; i++)
                {
                    formatted[i] = buffer[i];
                }
                string data = Encoding.ASCII.GetString(formatted);
                Console.WriteLine(data);
            }
        }
 
0
Markness napisał(a)

Próbowałem do tego celu użyć drugiego wątka ale niestety, mój kod:

Ciekawie opisałeś problem ;)

0

no myślałem że w kodzie widać...
no więc serwer w main'ie odbiera wiadomości, usiłowałem stworzyć drugi wątek który będzie umożliwiał wysyłanie wiadomości, odwrotnie dla klienta (wysyłanie w main'ie, odbieranie w drugim wątku)

0

Dalej nie wiemy z czym masz problem.

0

Klient pomyślnie wysyła wiadomości do serwera, jednak odwrotna komunikacja już nie działa.

0

Czemu robisz od d**y strony, że pierw startujesz wątek, zanim "włączysz" socket'a? Na razie jeszcze nie wiem w czym problem, ale spróbuj przepisać to jeszcze raz z przemyśleniem co i jak ma się odbywać.

0

no niestety zmieniłem moment startowania wątku na miejsce po włączeniu socketa jednak to nic nie zmieniło

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