Witam serdecznie.
Potrzebuję pomocy przy przesyłaniu wiadomosci pomiędzy serwerem i klientem TCP.
Stworzyłem formularz Windows, który ma pola na adres IP i port. Po kliknięciu przycisku Start uruchamia się serwer TCP. Aktywowany jest BackgroundWorker, który oczekuje na połączenia od klientów. Gdy ten się połączy zostaje zaakceptowany i uruchamia się kolejny backgroundWorker odpowiedzialny za pomieranie danych z bufora (Metoda ReadLine()).
Z kolei w formularzu klienta na sztywno podałem adres IP jaki mam przypisany w sieci lokalnej na serwerze. Łączę się z serwerem, a jeżeli połączenie zostanie ustanowione wysyłam wiadomosć.
Problem w tym, że serwer nie odbiera tej wiadomosci. Kod poniżej.
Serwer:
Po kliknięciu w przycisk "Start":
private void buttonStart_Click(object sender, EventArgs e)
{
addres = textBoxPortNumber.Text;
listener = new TcpListener(locals, int.Parse(addres));
listener.Start();
backgroundWorkerConnectingUsers.RunWorkerAsync();
}
backgroundWorkerConnectingUsers:
private void backgroundWorkerConnectingUsers_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
if (listener.Pending()) // Prawdiwe, gdy w kolejce oczekuje host do podłączenia
{
client = listener.AcceptTcpClient();
STR = new StreamReader(client.GetStream());
STW = new StreamWriter(client.GetStream());
backgroundWorkerReceiveMessage.RunWorkerAsync();
}
}
}
backgroundWorkerReceiveMessage:
private void backgroundWorkerReceiveMessage_DoWork(object sender, DoWorkEventArgs e)
{
while (client.Connected)
{
try
{
this.richTextBoxLogs.Invoke(new MethodInvoker(delegate ()
{
richTextBoxLogs.AppendText(STR.ReadLine() + "\n");
}));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
Kod po stronie klienta:
private void butLogin_Click(object sender, EventArgs e)
{
TcpClient tcpClient = new TcpClient();
IPAddress address = IPAddress.Parse("192.168.0.2");
tcpClient.Connect(address, 1234);
sw = new StreamWriter(tcpClient.GetStream());
if(tcpClient.Connected)
sw.WriteLine("HelloWorld!");
}
Z tego co rozumiem to w polu tekstowym richTextBoxLogs powienien się pojawić napis "HelloWorld"? W którym miejscu popełniam błąd?