Пишу простую программу для поднятия tcp сервера. И если не выводить сервер в отдельный поток то программа виснет в 0.
Я реализовал систему логов, и хочу выводить данные, дабы юзер не думал о том что все сломалось и не работает.
Код потока:
public static void Server(string Ip, int Port, string input_target)
{
try
{
int server_port = System.Convert.ToInt32(Port);
IPAddress localAddr = IPAddress.Parse(Ip);
TcpListener server = new TcpListener(localAddr, server_port);
server.Start();
logs_box.Text = logs_box.Text + "Сервер успешно запущен!\r\n";
while (true)
{
TcpClient client = server.AcceptTcpClient();
NetworkStream ns = client.GetStream();
logs_box.Text = logs_box.Text + "К серверу подключился: " + client + "\r\n";
byte[] target = new byte[100];
target = Encoding.Default.GetBytes(input_target);
logs_box.Text = logs_box.Text + "Сервер отправил клиенту: " + input_target + "\r\n";
ns.Write(target, 0, target.Length);
while (client.Connected)
{
byte[] msg = new byte[1024];
int count = ns.Read(msg, 0, msg.Length);
logs_box.Text = logs_box.Text + "Клиент прислал: " + Encoding.Default.GetString(msg, 0, count) + "\r\n";
}
}
}
catch (Exception ex)
{
logs_box.Text = logs_box.Text + ex.Message + "\r\n";
}
}
Код Кнопки запуска:
private void start_server_Click(object sender, EventArgs e)
{
logs_box.Text = logs_box.Text + "Сервер запускается...\r\n";
try
{
string ret_ip = input_ip.Text;
int ret_port = Convert.ToInt32(input_port);
string ret_target = input_target.Text;
Thread mythread = new Thread(Server(ret_ip, ret_port, ret_target));
mythread.Start();
}
catch (Exception ex)
{
logs_box.Text = logs_box.Text + ex.Message + "\r\n";
}
}
Я пытался решать эту проблему используя mainForm.changeText(this.Text); Но это кастыльно и не работает как надо. прошу помочь знающих людей.
Я реализовал систему логов, и хочу выводить данные, дабы юзер не думал о том что все сломалось и не работает.
Код потока:
public static void Server(string Ip, int Port, string input_target)
{
try
{
int server_port = System.Convert.ToInt32(Port);
IPAddress localAddr = IPAddress.Parse(Ip);
TcpListener server = new TcpListener(localAddr, server_port);
server.Start();
logs_box.Text = logs_box.Text + "Сервер успешно запущен!\r\n";
while (true)
{
TcpClient client = server.AcceptTcpClient();
NetworkStream ns = client.GetStream();
logs_box.Text = logs_box.Text + "К серверу подключился: " + client + "\r\n";
byte[] target = new byte[100];
target = Encoding.Default.GetBytes(input_target);
logs_box.Text = logs_box.Text + "Сервер отправил клиенту: " + input_target + "\r\n";
ns.Write(target, 0, target.Length);
while (client.Connected)
{
byte[] msg = new byte[1024];
int count = ns.Read(msg, 0, msg.Length);
logs_box.Text = logs_box.Text + "Клиент прислал: " + Encoding.Default.GetString(msg, 0, count) + "\r\n";
}
}
}
catch (Exception ex)
{
logs_box.Text = logs_box.Text + ex.Message + "\r\n";
}
}
Код Кнопки запуска:
private void start_server_Click(object sender, EventArgs e)
{
logs_box.Text = logs_box.Text + "Сервер запускается...\r\n";
try
{
string ret_ip = input_ip.Text;
int ret_port = Convert.ToInt32(input_port);
string ret_target = input_target.Text;
Thread mythread = new Thread(Server(ret_ip, ret_port, ret_target));
mythread.Start();
}
catch (Exception ex)
{
logs_box.Text = logs_box.Text + ex.Message + "\r\n";
}
}
Я пытался решать эту проблему используя mainForm.changeText(this.Text); Но это кастыльно и не работает как надо. прошу помочь знающих людей.