Dobrý den, chtěl jsem si naprogramovat takový malý P2P chat, ale zaseknul jsem se na jedné věci - když chce uživatel ukončit chat v době, kdy čeká thread na pozadí na Accept, nevím jak to ukončení korektně udělat.
Mám:
private Thread _listenThread;
private bool _programRunning = false;
public Form1()
{
InitializeComponent();
}
private void ListenThread()
{
var receiveBuffer = new byte[1024];
var mainReceiveSocket = new TcpListener(new IPEndPoint(new IPAddress(new byte[] { 127, 0, 0, 1 }), 1234));
mainReceiveSocket.Start();
TcpClient tcpClient = null;
Socket clientSocket = null;
while (_programRunning)
{
do
{
clientSocket = null;
tcpClient = mainReceiveSocket.AcceptTcpClient();
clientSocket = tcpClient.Client;
} while ((clientSocket == null) || (!clientSocket.Connected && _programRunning));
while (_programRunning)
{
clientSocket.Receive(receiveBuffer);
var message = System.Text.Encoding.Default.GetString(receiveBuffer);
}
}
}
private void Form1_Activated(object sender, EventArgs e)
{
_programRunning = true;
_listenThread = new Thread( new ThreadStart(ListenThread));
_listenThread.Start();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_programRunning = false;
_listenThread.Join();
}
Když nastavím _programRunning na false, tak to logicky nestačí, protože AcceptTcpClient čeká, dokud se nedočká.
Jak to děláte vy, prosím?