Прием и отправка сообщений с использование сокетов - C#

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

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

Здравствуйте. Нашел в интернете образец кода сервера который оказался бы для меня весьма полезным. Проблема в том что я не могу понять в каком месте происходит прием сообщения (как вывести на кансоль) и отправка ответа клиенту.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace Server
{
    class AsynchronousIoServer
    {
        // метод SetupServerSocket и конструктор - те же,
        // что и в классе ThreadedServer
        private Socket _serverSocket;
        private int _port;
 
        private void SetupServerSocket()
        {
            // Получаем информацию о локальном компьютере
            _port = 5321;
            IPHostEntry localMachineInfo =
                Dns.GetHostEntry(Dns.GetHostName());
            IPEndPoint myEndpoint = new IPEndPoint(
               localMachineInfo.AddressList[0], _port);
 
            // Создаем сокет, привязываем его к адресу
            // и начинаем прослушивание
            _serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            _serverSocket.Bind(myEndpoint);
            _serverSocket.Listen((int)SocketOptionName.MaxConnections);
        }
 
        private class ConnectionInfo
        {
            public Socket Socket;
            public byte[] Buffer;
        }
 
        private List<ConnectionInfo> _connections =
            new List<ConnectionInfo>();
 
        public void Start()
        {
            SetupServerSocket();
            for (int i = 0; i < 10; i++)
                _serverSocket.BeginAccept(new
                    AsyncCallback(AcceptCallback), _serverSocket);
        }
 
        private void AcceptCallback(IAsyncResult result)
        {
            ConnectionInfo connection = new ConnectionInfo();
            try
            {
                // Завершение операции Accept
                Socket s = (Socket)result.AsyncState;
 
                connection.Socket = s.EndAccept(result);
 
                connection.Buffer = new byte[255];
 
                lock (_connections) _connections.Add(connection);
 
                // Начало операции Receive и новой операции Accept
                connection.Socket.BeginReceive(connection.Buffer, 0, connection.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), connection);
 
                _serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), result.AsyncState);
 
            }
            catch (SocketException exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Socket exception: " + exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Exception: " + exc);
            }
        }
 
        private void ReceiveCallback(IAsyncResult result)
        {
            ConnectionInfo connection =
                (ConnectionInfo)result.AsyncState;
            try
            {
                int bytesRead =
                    connection.Socket.EndReceive(result);
                if (0 != bytesRead)
                {
                    lock (_connections)
                    {
                        foreach (ConnectionInfo conn in _connections)
                        {
                            if (connection != conn)
                            {
                                conn.Socket.Send(connection.Buffer,
                                    bytesRead, SocketFlags.None);
                            }
                        }
                    }
 
                    connection.Socket.BeginReceive(connection.Buffer, 0,
                        connection.Buffer.Length, SocketFlags.None,
                        new AsyncCallback(ReceiveCallback),
                        connection);
                }
                else CloseConnection(connection);
            }
            catch (SocketException exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Socket exception: " +
                    exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Exception: " + exc);
            }
        }
 
        private void CloseConnection(ConnectionInfo ci)
        {
            ci.Socket.Close();
            lock (_connections) _connections.Remove(ci);
        }
    }
}

Решение задачи: «Прием и отправка сообщений с использование сокетов»

textual
Листинг программы
                if (0 != bytesRead)
                {
                    Console.Write(Encoding.ASCII.GetString(connection.Buffer, 0, bytesRead));

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


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

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

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