一、TCP服务器
1、三个重要对象:Tcp监听、客户端、数据网络流
2、设置监听,捕获客户端的连接;
3、客户端连入,开线程通过网络流接收数据;
t3.IsBackground = true;//设置线程为后台线程
服务器主体代码如下:
private TcpListener listener;
private TcpClient client;
private NetworkStream stream;
private void button_accept_Click(object sender, RoutedEventArgs e)
{
if (textBoxIP.Text == "" || textBoxport.Text == "")
MessageBox.Show("请输入IP和端口!");
else
{
try
{
listener = new TcpListener(IPAddress.Parse(textBoxIP.Text), Int32.Parse(textBoxport.Text));
listener.Start();//开始监听
MessageBox.Show("服务器开始监听!");
Thread t3 = new Thread(() => listen_connct());
t3.IsBackground = true;//设置t3为后台进程
t3.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void listen_connct()
{
while (true)
{
if (client == null)
{
client = listener.AcceptTcpClient();
}
stream = client.GetStream();//获取客户端网络流
byte[] data1 = new byte[1024];
if (stream.DataAvailable)
Msg_Recv(stream, data1);
Thread.Sleep(10);
}
}
private void Msg_Recv(NetworkStream st, byte[] data)
{
int len = st.Read(data, 0, 1024);
string messge = Encoding.UTF8.GetString(data, 0, len);
Dispatcher.Invoke(() => { textBoxRecv.Text = DateTime.Now + "\t" + messge; });
}
private void button_send_Click(object sender, RoutedEventArgs e)
{
try
{
string message = textBoxSend.Text;
byte[] data = new byte[1024];
data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
二、TCP客户端
1、主要对象:客户端、字节流
2、连接指定服务器;
3、连接成功后,开线程通过字节流接受数据;
TCP客户端主体代码如下:
TcpClient client;
NetworkStream stream;
private void button_connect_Click(object sender, RoutedEventArgs e)
{
if (textBoxIP.Text == "" || textBoxport.Text == "")
MessageBox.Show("请写入IP地址和端口!");
else
{
try
{
client = new TcpClient();
client.Connect(IPAddress.Parse(textBoxIP.Text), Int32.Parse(textBoxport.Text));
stream = client.GetStream();
byte[] buffer = new byte[1024];
Thread t1 = new Thread(() => Msg_Recv(stream, buffer));
t1.Start();
t1.IsBackground = true;
MessageBox.Show("连接成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
private void Msg_Recv(NetworkStream stream, byte[] data)
{
while (true)
{
int len=stream.Read(data, 0, 1024);
string message = Encoding.UTF8.GetString(data,0,len);
Dispatcher.BeginInvoke(new Action(() => { textBoxRecv.Text = "接收:" + message; }));
Thread.Sleep(10);
}
}
private void button_send_Click(object sender, RoutedEventArgs e)
{
string message = textBoxSend.Text;
byte[] buffer = Encoding.UTF8.GetBytes(message);
stream.Write(buffer, 0, buffer.Length);
}