Соединение сокета C # потеряно в следующей winform - PullRequest
0 голосов
/ 07 августа 2011

У меня есть «form1» и «form2».

В настоящее время я использую сокет TCP IP на C #.После того, как я подключился к моему серверу в форме 1, форма 2 загружается.Однако в form2 я не подключился уже, и я получил сообщение о том, что он не подключен.

Как мне убедиться, что он все еще подключен во всех формах в моем приложении?Я сейчас тестирую на своем компьютере.Это простое приложение чата на C #, и я довольно новичок в C #.

form1 (ниже приведены мои коды кнопок подключения)

clientSocket.Connect(tbxIP.Text, 8888);
serverStream = clientSocket.GetStream();
string faciName = "Facilitator:" + "$";

byte[] outStream = System.Text.Encoding.ASCII.GetBytes(faciName);
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();


Thread ctThread = new Thread(getMessage);
ctThread.Start();

форма 2 (ниже приведены коды для моей кнопки отправки сообщения насервер)

serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(tbxMessageBox.Text + "$");
if (serverStream != null)
{
    serverStream.Write(outStream, 0, outStream.Length);
    serverStream.Flush();
    tbxMessageBox.Clear();
}

Спасибо.

1 Ответ

2 голосов
/ 07 августа 2011

IMO, способ приблизиться к этому состоит в том, чтобы инкапсулировать все поведение сокетов в некоторый класс, который обеспечивает поведение (вместо API на основе сокетов), а затем передать ссылку на этот экземпляр в ваши формы, т.е.

ServerComms comms = new ServerComms(address);
comms.Open();
using(var mainForm = new MainForm()) {
    mainForm.Comms = comms;
    Application.Run(mainForm);
} 

Очевидно, ваш экземпляр MainForm также может передавать это вперед:

void ShowChildForm() {
    var childForm = new ChildForm();
    childForm.Comms = Comms;
    childForm.Show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...