Сервер на сокетах TCP - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте.Пробую по примеру сделать простенький чат на TCP. В клиенте отсылаю сообщения, но до сервера доходит только первое. В чем может быть проблема? Сервер
 class Program
    {
        static int port = 8005; // порт для приема входящих запросов
        static void Main(string[] args)
        {
         
            // создаем сокет
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            
            // получаем адреса для запуска сокета
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.137.1"), port);
                       
            try
            {
                // связываем сокет с локальной точкой, по которой будем принимать данные
                socket.Bind(ipPoint);
 
                // начинаем прослушивание
                socket.Listen(2);
 
                Console.WriteLine("Сервер запущен. Ожидание подключений...");
 
                while (true)
                {
                    Socket handler = socket.Accept();
 
                    // ******************************************************************************
                    // получаем сообщение
                  
                        StringBuilder builder = new StringBuilder();
                        int bytes = 0; // количество полученных байтов
                        byte[] data = new byte[256]; // буфер для получаемых данных
                    
                    do
                    {
                        bytes = handler.Receive(data);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (handler.Available > 0);
 
                    Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
                    // ******************************************************************************
 
                    // закрываем сокет
                    handler.Shutdown(SocketShutdown.Both);
                   handler.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
 
        }
    }
Клиент
namespace клиент
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
                IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("192.168.137.1"), 8005);
 
                // подключаемся к серверу
                socket.Connect(ipPoint);
                while (true)
                {
                    // отправляем сообщение ****************************
                    Console.Write("Введите сообщение:");
                    string message = Console.ReadLine();
                    byte[] data = Encoding.Unicode.GetBytes(message);
                    socket.Send(data);
                    //**************************************************
                }
                // закрываем сокет
                socket.Shutdown(SocketShutdown.Both);
                socket.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();

        }
    }
}

Решение задачи: «Сервер на сокетах TCP»

textual
Листинг программы
namespace Server
{
    class ClientState
    {
        public Socket Socket { get; }
        public byte[] Buffer { get; }
 
        public ClientState(Socket sock)
        {
            Socket = sock;
            Buffer = new byte[256];
        }
    }
 
    class Program
    {
        static int port = 8005;
 
        static Socket socket;
 
        static void Main(string[] args)
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
            socket.Bind(new IPEndPoint(IPAddress.Any, port));
 
            socket.Listen(100);
 
            Accept();
 
            Console.ReadKey();
 
            //socket.Shutdown(SocketShutdown.Both);
            //socket.Close();
        }
 
        static void Accept()
        {
            socket.BeginAccept(AcceptCallback, null);
        }
 
        static void AcceptCallback(IAsyncResult res)
        {
            Socket handler = socket.EndAccept(res);
 
            Console.WriteLine("client connected: {0}", handler.RemoteEndPoint);
 
            Accept();
 
            Receice(new ClientState(handler));
        }
 
        static void Receice(ClientState client)
        {
            client.Socket.BeginReceive(client.Buffer, 0, client.Buffer.Length, SocketFlags.None, ReceiveCallback, client);
        }
 
        static void ReceiveCallback(IAsyncResult res)
        {
            ClientState client = (ClientState)res.AsyncState;
 
            int received;
 
            try
            {
                received = client.Socket.EndReceive(res);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                return;
            }
 
            if (received == 0)
            {
                Console.WriteLine("client disconnected");
                return;
            }
 
            Receice(client);
 
            string message = Encoding.Unicode.GetString(client.Buffer, 0, received);
 
            Console.WriteLine("{0:HH:mm:ss}: {1}", DateTime.Now, message);
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.667 из 5
Похожие ответы