Hi
my professor give me a project for exam
make a messenger
i`m trying to make one, but it`s so difficult to me
use socket server and
if i send message then other side get popup message
http://image.kilho.net/?pk=1211118[
^]
Server
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;
using Pop;
namespace TCP_Server
{
public partial class Form1 : Form
{
TcpListener _tcpLitener;
bool _open_flag = false;
Thread _thread_listener;
Thread _thread_receive;
NetworkStream _ntstream;
StreamReader _streader;
StreamWriter _stwriter;
TcpClient _client;
public Form1()
{
InitializeComponent();
}
private void bt_open_Click(object sender, EventArgs e)
{
try
{
if (!_open_flag)
{
_tcpLitener = new TcpListener(IPAddress.Parse(tb_ip.Text), int.Parse(tb_port.Text));
_tcpLitener.Start();
_open_flag = true;
_thread_listener = new Thread(listener);
_thread_listener.Start();
MessageBox.Show("server start");
}
}
catch (Exception ex)
{
_open_flag = false;
MessageBox.Show(ex.ToString());
}
} void listener()
{
try
{
if (_open_flag)
{
_client = _tcpLitener.AcceptTcpClient();
MessageBox.Show("Client가 접속하였습니다");
create_stream();
}
else
{
MessageBox.Show("서버가 열리지 않았습니다");
}
}
catch(Exception ex)
{
_open_flag = false;
MessageBox.Show(ex.ToString());
}
}
void create_stream()
{
try
{
_ntstream = _client.GetStream();
_client.ReceiveTimeout = 500;
_streader = new StreamReader(_ntstream);
_stwriter = new StreamWriter(_ntstream);
_thread_receive = new Thread(receive);
_thread_receive.Start();
}
catch (Exception ex)
{
_open_flag = false;
MessageBox.Show(ex.ToString());
}
}
void receive()
{
try
{
while (_open_flag)
{
string _receive_data = _streader.ReadLine();
if (_receive_data != null)
{
Form2 fm2 = new Form2(_client);
fm2.ShowDialog();
}
}
}
catch (IOException)
{
if (_open_flag)
{
_thread_receive = new Thread(receive);
_thread_receive.Start();
}
}
catch (Exception ex)
{
_open_flag = false;
MessageBox.Show("클라이언트의 연결이 종료되었습니다\r\n다시 서버오픈을 시도합니다.");
_tcpLitener.Stop();
bt_open_Click(null, null);
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_open_flag = false;
}
}
}
Form2
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using Pop;
namespace Pop
{
public partial class Form2 : Form
{
NetworkStream _ntstream;
StreamReader _streader;
StreamWriter _stwriter;
Thread _thread_receive;
TcpClient _client;
bool _connect_flag = false;
delegate void D_receive(string data);
public Form2(TcpClient client)
{
MessageBox.Show(Convert.ToString(client));
_client = client;
InitializeComponent();
}
private void tb_connect_Click(object sender, EventArgs e)
{
try
{
if (!_connect_flag)
{
_client = new TcpClient(tb_ip.Text, int.Parse(tb_port.Text));
_connect_flag = true;
_ntstream = _client.GetStream();
_streader = new StreamReader(_ntstream);
_stwriter = new StreamWriter(_ntstream);
_client.ReceiveTimeout = 500;
_thread_receive = new Thread(receive);
_thread_receive.Start();
}
}
catch (Exception ex)
{
_connect_flag = false;
MessageBox.Show("접속에 실패하였습니다");
}
}
void receive()
{
try
{
while (_connect_flag)
{
string receive_data = _streader.ReadLine();
if (receive_data != null)
{
if (receive_data.Equals(1))
{
}
tb_recevie_text(receive_data);
}
}
}
catch (IOException)
{
if (_connect_flag)
{
_thread_receive = new Thread(receive);
_thread_receive.Start();
}
else
{
_connect_flag = false;
}
}
catch (Exception ex)
{
_connect_flag = false;
MessageBox.Show(ex.ToString());
}
}
void tb_recevie_text(string data)
{
if (this.InvokeRequired)
{
this.Invoke(new D_receive(tb_recevie_text),data);
}
else
{
if (data != null)
{
tb_receive.AppendText(data + "\r\n");
}
}
}
private void bt_send_Click(object sender, EventArgs e)
{
try
{
if (_connect_flag)
{
if (tb_writeline.Text != string.Empty)
{
_stwriter.WriteLine(tb_writeline.Text);
_stwriter.Flush();
}
}
}
catch(Exception ex)
{
_connect_flag = false;
MessageBox.Show(ex.ToString());
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_connect_flag = false;
}
private void tb_receive_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
}
}
and Client
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
namespace TCP_Client
{
public partial class Form1 : Form
{
NetworkStream _ntstream;
StreamReader _streader;
StreamWriter _stwriter;
Thread _thread_receive;
TcpClient _client;
bool _connect_flag = false;
delegate void D_receive(string data);
public Form1()
{
InitializeComponent();
}
private void tb_connect_Click(object sender, EventArgs e)
{
try
{
if (!_connect_flag)
{
_client = new TcpClient(tb_ip.Text, int.Parse(tb_port.Text));
_connect_flag = true;
_ntstream = _client.GetStream();
_streader = new StreamReader(_ntstream);
_stwriter = new StreamWriter(_ntstream);
_client.ReceiveTimeout = 500;
_thread_receive = new Thread(receive);
_thread_receive.Start();
}
}
catch (Exception ex)
{
_connect_flag = false;
MessageBox.Show("접속에 실패하였습니다");
}
}
void receive()
{
try
{
while (_connect_flag)
{
string receive_data = _streader.ReadLine();
if (receive_data != null)
{
if (receive_data.Equals(1))
{
}
tb_recevie_text(receive_data);
}
}
}
catch (IOException)
{
if (_connect_flag)
{
_thread_receive = new Thread(receive);
_thread_receive.Start();
}
else
{
_connect_flag = false;
}
}
catch (Exception ex)
{
_connect_flag = false;
MessageBox.Show(ex.ToString());
}
}
void tb_recevie_text(string data)
{
if (this.InvokeRequired)
{
this.Invoke(new D_receive(tb_recevie_text),data);
}
else
{
if (data != null)
{
tb_receive.AppendText(data + "\r\n");
}
}
}
private void bt_send_Click(object sender, EventArgs e)
{
try
{
if (_connect_flag)
{
if (tb_writeline.Text != string.Empty)
{
_stwriter.WriteLine(tb_writeline.Text);
_stwriter.Flush();
}
}
}
catch(Exception ex)
{
_connect_flag = false;
MessageBox.Show(ex.ToString());
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
_connect_flag = false;
}
private void tb_writeline_TextChanged(object sender, EventArgs e)
{
}
}
}
and my problem is if i send message to server, Server- Form2 Popup but it cant communicate each other
how could i solve it:?