none
Socket и работа с ним! RRS feed

  • Вопрос

  • Вот часть кода 
    Код C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
            public void SendMessageFromSocket(int port, string IPadd, string comm)
            {
                // Буфер для входящих данных
                byte[] bytes = new byte[1024];
     
                // Устанавливаем удаленную точку для сокета
                IPHostEntry ipHost = Dns.GetHostEntry(IPadd);
                IPAddress ipAddr = ipHost.AddressList[0];
                IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
                Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     
                sender.Connect(ipEndPoint);
     
                byte[] msg = Encoding.UTF8.GetBytes(comm);
     
     
                // Получаем ответ от сервера
                int bytesRec = sender.Receive(bytes);
     
                string words = Encoding.UTF8.GetString(bytes, 0, bytesRec);
     
                // Отправляем данные через сокет
                int bytesSent = sender.Send(msg);
     
                string wordss = Encoding.UTF8.GetString(msg, 0, bytesSent);
               sender.Shutdown(SocketShutdown.Both);
               sender.Close();
            }
    При вызове SendMessageFromSocket выполняется все полностью(int port, string IPadd, string comm это все я ввожу через TextBox), а мне хочется чтоб я смог по нажатию на кнопку коннект подключится, потом при нажатии кнопки send - отправить команду, при нажатии на кнопку disconnect отключится. Я так понимаю что мне необходимо как-то разбить код на части. Спасибо
    29 октября 2013 г. 21:55

Ответы

  • Добрый день.

    Да, вам нужно разбить код на части.

    Вот это делаете полем класса:

    Socket sender { get; set; }

    Вот первый метод:

            public void CreateSocket(int port, string IPadd)
            {
                // Буфер для входящих данных
                byte[] bytes = new byte[1024];
     
                // Устанавливаем удаленную точку для сокета
                IPHostEntry ipHost = Dns.GetHostEntry(IPadd);
                IPAddress ipAddr = ipHost.AddressList[0];
                IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
                sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     
                sender.Connect(ipEndPoint); 
            }

    Вот второй:

            public void SendMessageFromSocket(string comm)
            {
                // Буфер для входящих данных
                byte[] bytes = new byte[1024];
     
    
                byte[] msg = Encoding.UTF8.GetBytes(comm);
     
     
                // Получаем ответ от сервера
                int bytesRec = sender.Receive(bytes);
     
                string words = Encoding.UTF8.GetString(bytes, 0, bytesRec);
     
                // Отправляем данные через сокет
                int bytesSent = sender.Send(msg);
     
                string wordss = Encoding.UTF8.GetString(msg, 0, bytesSent);
    
            }

    Вот третий:

            public void CloseSocket()
            {
               sender.Shutdown(SocketShutdown.Both);
               sender.Close();
            }

    30 октября 2013 г. 6:56
    Отвечающий

Все ответы

  • Добрый день.

    Да, вам нужно разбить код на части.

    Вот это делаете полем класса:

    Socket sender { get; set; }

    Вот первый метод:

            public void CreateSocket(int port, string IPadd)
            {
                // Буфер для входящих данных
                byte[] bytes = new byte[1024];
     
                // Устанавливаем удаленную точку для сокета
                IPHostEntry ipHost = Dns.GetHostEntry(IPadd);
                IPAddress ipAddr = ipHost.AddressList[0];
                IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
                sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     
                sender.Connect(ipEndPoint); 
            }

    Вот второй:

            public void SendMessageFromSocket(string comm)
            {
                // Буфер для входящих данных
                byte[] bytes = new byte[1024];
     
    
                byte[] msg = Encoding.UTF8.GetBytes(comm);
     
     
                // Получаем ответ от сервера
                int bytesRec = sender.Receive(bytes);
     
                string words = Encoding.UTF8.GetString(bytes, 0, bytesRec);
     
                // Отправляем данные через сокет
                int bytesSent = sender.Send(msg);
     
                string wordss = Encoding.UTF8.GetString(msg, 0, bytesSent);
    
            }

    Вот третий:

            public void CloseSocket()
            {
               sender.Shutdown(SocketShutdown.Both);
               sender.Close();
            }

    30 октября 2013 г. 6:56
    Отвечающий
  • Спасибо!

    Egor

    30 октября 2013 г. 15:09