Как отправлять сообщения с клиента с помощью кнопки без сброса клиента TCP? - PullRequest
0 голосов
/ 28 апреля 2018

поэтому у меня есть простое приложение для Windows Forms, и это чат. Пока все работает хорошо, серверы подключаются нормально, но я хочу, чтобы клиент мог отправить сообщение на сервер, нажав кнопку отправки. Вот код для нажатия кнопки отправки:

private void sendButton_Click(object sender, EventArgs e) {
    try {
        TcpClient tcp = new TcpClient();
        Stream stream = tcp.GetStream();
        ASCIIEncoding asii = new ASCIIEncoding();
        byte[] by = asii.GetBytes(sendBox.Text);
        messageBox.Text += "\nTransmitting...";
        messageBox.Refresh();
        stream.Write(by, 0, by.Length);
        messageBox.Text += "\nTransmitted!";
        messageBox.Refresh();
    }
    catch (Exception eg) {
        messageBox.Text += Convert.ToString(eg);
        messageBox.Refresh();
    }

}

Когда я пытался отправить сообщение, он выдал ошибку;

Операция не разрешена для неподключенных розеток.

Я твердо верю, что это из-за того, что мне пришлось звонить TcpClient tcp = new TcpClient();, так как с моим ограниченным знанием я бы подумал, что это приведет к разрыву текущего соединения. Как я могу оставаться на связи, как это, но по-прежнему отправлять сообщения с помощью кнопки отправки?

P.S Если вам нужно увидеть больше моего кода, например сервера или соединения, дайте мне знать.

1 Ответ

0 голосов
/ 28 апреля 2018

нигде не видит, что вы подключаете свой объект tcp client. вам нужно либо передать ip / port в .ctor, либо вызвать метод .Connect(...).

или: если вы собираетесь использовать этот клиент более интенсивно, вы повторно используете его, сделав его свойством формы или общедоступным свойством вашего класса сервера / связи, чтобы форма могла получить к нему доступ.

Между прочим, наиболее чистое решение (более простое в обслуживании и тестировании) было бы удалить этот класс tcp из формы в любом случае и создать класс, отвечающий только за связь. этот класс может иметь метод SendMessage со строковым аргументом и обрабатывать создание и подключение tcp-клиента и отправку текста.

если это что-то еще: в чем ошибка? (в таких случаях было бы полезно отправить сообщение об исключении)

...