hej udviklere, jeg har et problem med min netværks klasse, de fleste threads starter fint, men når den skal kalde metoden sendMessage() som skal sende en besked tilbage til klienten virker det som om at den aldrig laver den thread, og dermed bliver metoden aldrig kaldt.
her er min fulde kode, (tag jer ikke af debug outputsne)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace Server
{
class Network
{
private TcpListener tcpListener;
private Thread listenThread;
public Network()
{
IPAddress ip = IPAddress.Parse("127.0.0.1");
this.tcpListener = new TcpListener(ip, 8001);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
}
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
TcpClient client = this.tcpListener.AcceptTcpClient();
Console.WriteLine("connection accepted");
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
Console.WriteLine("inde i handleClientComm()");
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
Console.WriteLine("inde i while løkken i handleClientComm()");
bytesRead = 0;
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
//socket error
break;
}
if (bytesRead == 0)
{
//the client disconnected
Console.WriteLine("The client has disconnected");
break;
}
//message has succesfully been received
ASCIIEncoding encoder = new ASCIIEncoding();
Console.WriteLine(encoder.GetString(message, 0, bytesRead));
Thread sendMessage = new Thread(new ParameterizedThreadStart(HandleClientComm));
sendMessage.Start(client);
}
tcpClient.Close();
}
//den når aldrig herned
private void sendMessage(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] toSend = encoder.GetBytes("Message received");
clientStream.Write(toSend, 0, toSend.Length);
Console.WriteLine("message sent");
clientStream.Flush();
}
}
}