Я хотел посмотреть на TCP-связь на C#. Я уже учился с помощью простых программ для приема и отправки по TCP. Однако я хочу сделать еще один шаг.Доступ к одному TCP-соединению из функции. C#
-EDIT: простые программы имеют один общий вид, они открывают TCP-соединение, отправляют или получают и закрывают соединение. При необходимости они начинаются снова и снова. Но это не то, что я имею в виду для своей программы. EDIT--
Что я хочу сделать:
У меня есть форма с кнопкой, которая устанавливает соединение с сервером. (Сервер задан и работает правильно.) После установления соединения пользователь может отправлять свои команды с помощью кнопки (байты) и получать ответы от сервера, отображающего его на ярлыке.
Вид решение, которое я придумал:
Так как я хотел, чтобы моя программа очень гибкая я создал класс для обработки связи, отделяя его от остальной части кода программы.
В этом классе CommunicationTCP я создал три функции.
- Подключение к серверу
- Отправка команды
- получения ответа от сервера
Это то, что он выглядит как
.
.
.
using System.Net.Sockets;
//eventually tried declarations like
//TcpClient tcpclnt;
//NetworkStream tcpStream;
namespace MyProgram
{
public partial class CommunicationTCP
{
public static void Connect()
{
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ServerIP,ServerPORT);
}
public static void TCPSendData()
{
TcpClient tcpclnt = new TcpClient();
NetworkStream netStream = tcpclnt.GetStream();
byte[] sendbytes = Encoding.UTF8.GetBytes("COMMAND");
netStream.Write(sendbytes, 0, sendbytes.Length);
}
public static void TCPGetData()
{
//not yet programmed.
}
}
}
о соединении функция вызывается, когда в . Передача команд, как я сказал в начале, посылает пользователь через кнопки.
К сожалению, код выше не работает, потому что tcpclnt
доступен только в пределах их функции. Я пробовал разные определения функции и деклараций, но без успеха.
Как я могу изменить программу, чтобы tcp-соединение оставалось открытым и команды посылались?
Вам нужно использовать тот же экземпляр 'TcpClient' для всех ваших функций. Сделайте вместо переменной локальной переменной 'tcpclnt' переменную уровня класса. – wablab