Wątki w C# - parę pytań

0

Witam serdecznie,
Mam następujący kod:

class Program
{
static StreamReader streader = null;
static StreamWriter write = null;
static TcpClient serwer = null;
static Byte[] bufor = null;
static NetworkStream netstream=null;
private static void reader()
{
while (true)
{
int lData = netstream.Read(bufor, 0, serwer.Client.ReceiveBufferSize);
String myString = Encoding.ASCII.GetString(bufor);
myString = myString.Substring(0, lData);
Console.WriteLine(myString);
}
}
private static void writer()
{
while (true)
{
String myString = Console.ReadLine() + "\n";
netstream.Write(Encoding.ASCII.GetBytes(myString.ToCharArray()), 0, myString.Length);
}
}
static void Main(string[] args)
{
try
{
String host = "192.168.1.149";
serwer = new TcpClient(host, 8081);
if (serwer.Client.Connected)
{
Console.WriteLine("Połączono z serwerem:" + host);
netstream = serwer.GetStream();
bufor = new byte[serwer.Client.ReceiveBufferSize];
new Thread(new ThreadStart(writer)).Start();
new Thread(new ThreadStart(reader)).Start();
String myString = "nnnnnnnnnnnnnnnnnn";
netstream.Write(Encoding.ASCII.GetBytes(myString.ToCharArray()), 0, myString.Length);
}
else
Console.WriteLine("Nie połączono ze zdalnym hostem");
}
catch (SocketException se)
{
Console.WriteLine("Błąd : " + se.Message);
}
}
}

chciałbym do niego dorobić 2 rzeczy:

  • po wpisaniu słowa "EXIT" chciałbym żeby wątek się zakończył
  • chciałbym żeby do tekstu "Połączono z serwerem" doszła informacja o IP komputera na którym została uruchomiona aplikacja

Wiecie może jak to zrobić??
Ogólnie po zerwaniu połączenia wątek się automatycznie zakańcza, ale ja chciałbym programowo zamykać/otwierać (otwieranie mam) wątki... Wie ktoś może jak to zrobić??

Z góry dzięki za pomoc,
Pozdrawiam Northwest

0

Witam,
wydaje mi się że jeśli metoda zakończy działanie to wątek zostanie zabity.
Czyli możesz sobie zrobić prywatne pole bool, np:

         private bool flag = true;

teraz w funkcji main możesz napisać:

         flag = !Console.ReadLine().Equals("exit", StringComparison.InvariantCultureIgnoreCase);

i teraz odpowiednio w funkcji read() i write() zamiast:

        while(true)
        {
         ......
         }

npiasz:

         while(flag)
         {
          .........
         }

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1