I am trying to write a simple Console based Chat app. I am having
trouble multithreading, if someone can give me a hint. I am trying to
pass the NetworkStream 'ns' to the methods, but also run seperate
threads for listening and sending. Here's the code, thanks for any
input.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
[STAThread]
public static void Main(string[] args)
{
string client, name;
TcpClient server;
Console.WriteLine("Enter Name of Server Computer:");
client = Console.ReadLine();
Console.WriteLine("Enter Your Name:");
name = Console.ReadLine();
Console.WriteLine("Searching For Server...");
try
{
server = new TcpClient(client, 45000);
}
catch (SocketException)
{
Console.WriteLine("Unable To Connect: LOCALHOST acting as
Server");
TcpListener newsock = new TcpListener(45000);
newsock.Start();
server = newsock.AcceptTcpClient();
}
NetworkStream ns = server.GetStream();
Class1 start = new Class1();
start.RunThreads();
}
public void RunThreads()
{
Thread t2 = new Thread(new ThreadStart(Send));
t2.Start();
Thread t3 = new Thread(new ThreadStart(Receive));
t3.Start();
}
public void Send()
{
while(true)
{
input = Console.ReadLine();
if (input == "exit")
break;
ns.Write(Encoding.ASCII.GetBytes(input), 0, input.Length);
ns.Flush();
}
Console.WriteLine("Disconnecting from server...");
ns.Close();
server.Close();
}
public void Receive()
{
byte[] data = new byte[1024];
int recv = ns.Read(data, 0, data.Length);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(stringData);
}
}
}