当前位置 : 主页 > 网络编程 > net编程 >

WinForm(十五)窗体间通信

来源:互联网 收集:自由互联 发布时间:2023-09-03
在很多WinForm的程序中,会有客户端之间相互通信的需求,或服务端与客户端通信的需求,这时就要用到TCP/IP的功能。在.NET中,主要是通过Socket来完成的,下面的例子是通过一个TcpList

  在很多WinForm的程序中,会有客户端之间相互通信的需求,或服务端与客户端通信的需求,这时就要用到TCP/IP的功能。在.NET中,主要是通过Socket来完成的,下面的例子是通过一个TcpListerner作为监听,等待TcpClient的连接,连接成功后就可以利用NetStream进行信息互通了。

  在互相通信过程中,发送和接收分别在不同的线程中处理,并且还要处理UI更新。

using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Sockets;

namespace WinFormsDemo15
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 创建连接后的网络流
/// </summary>
NetworkStream _stream;
private void ConnectionButton_Click(object sender, EventArgs e)
{
if (IsServer.Checked)
{
AcceptTcpClient();
}
else
{
var tcpClient = new TcpClient(IPTextBox.Text, int.Parse(PortTextBox.Text));
_stream = tcpClient.GetStream();
ReciveMessage(_stream);
}
}
/// <summary>
/// 在一个新线程中接收TcpClient连接
/// </summary>
void AcceptTcpClient()
{
Task.Run(() =>
{
var listener = new TcpListener(IPAddress.Any, int.Parse(PortTextBox.Text));
listener.Start();
var tcpClient = listener.AcceptTcpClient();
this.Invoke(() =>
{
YouTextBox.Text += $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} \r\n收到客户端连接。\r\n";
});
_stream = tcpClient.GetStream();
ReciveMessage(_stream);
});
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="stream">网络流</param>
void ReciveMessage(NetworkStream stream)
{
Task.Run(() =>
{
while (true)
{
var messageArr = new byte[1024];
stream.Read(messageArr, 0, messageArr.Length);
this.Invoke(() =>
{
var message = System.Text.Encoding.UTF8.GetString(messageArr).Trim('\0');
YouTextBox.Text += $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 对方说:\r\n{message}\r\n";
});
}
});
}
/// <summary>
/// 发送消息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SendButton_Click(object sender, EventArgs e)
{
var messageArr = System.Text.Encoding.UTF8.GetBytes(MyTextBox.Text);
_stream.Write(messageArr, 0, messageArr.Length);
_stream.Flush();
YouTextBox.Text += $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 我说:\r\n{MyTextBox.Text}\r\n";
MyTextBox.Clear();
}
}
}

下面是演示结果:

WinForm(十五)窗体间通信_窗体间通信

  想要更快更方便的了解相关知识,可以关注微信公众号 

WinForm(十五)窗体间通信_WinForm_02



上一篇:如何在Excel 中插入和删除行或列
下一篇:没有了
网友评论