基于C#的软件大杂烩(4.2)——TCP服务端的文本接收和发送
上一期使用TCP协议接收图片数据,本期我们使用TCP协议来实现文本的接收和发送。
关于TCP协议的具体内容本文不做赘述,如果有感兴趣的伙伴可以去CSDN或者B站查看相关视频。
。

简单的布置一下界面, 将数据接收和数据发送分开来。接收数据的部分监听我们的端口,发送数据的部分根据我们输出的端口地址来向目标地点发送数据。
并且由于逻辑的问题,使用这些内容的时候会把其他内容禁用,防止端口被占用或者重复监听。
接收数据
private void StartListeningText()
{
try
{
// 获取选定的IP地址和端口
IPAddress ipAddress = IPAess.Parse(IPAdssChoose.Selem.ToString());
int port = int.Parse(PortChoose.Text);
// 启动TCP监听
tcpListener = new TcpListener(ipAddress, port);
tcpListener.Start();
cancellationTokenSource = new CancellationTokenSource();
isListening = true;
listenerThread = new Thread(() => ListenForText(cancellationTokenSource.Token));
listenerThread.Start();
}
catch (Exception ex)
{
Mex.Show($"错误:{ex.Message}", "错误", Messttons.OK, .Error);
}
}
private void StopListening()
{
// 停止TCP监听
isListening = false;
if (cancellationTokenSource != null)
{
cancellationTokenSource.Cancel();
cancellationTokenSource.Dispose();
cancellationTokenSource = null;
}
if (tcpListener != null)
{
tcpListener.Stop();
}
}
private void ListenForText(CancellationToken cancellationToken)
{
try
{
while (!cancellationToken.IsCancellationRequested)
{
using (TcpClient tcpClient = tcpListener.AcceptTcpClient())
{
using (NetworkStream networkStream = tcpClient.GetStream())
{
using (MemoryStream memoryStream = new MemoryStream())
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = networkStream.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStream.Write(buffer, 0, bytesRead);
}
// 处理和显示接收到的数据
string receivedText = Encoding.UTF8.GetString(memoryStream.ToArray());
ReciveText.AppendText(receivedText);
}
}
// 关闭TcpClient
tcpClient.Close();
}
}
}
catch (Exception ex)
{
Console.WriteLine($"错误:{ex.Message}");
}
}
接收数据的逻辑和上一期接收图像差不多,但是更为简单,我们不需要把数据转为图像,只需要直接把内容显示出来。
发送数据
private void TransButton_Click(object sender, EventArgs e)
{
int port = int.Parse(PortChooseTran.Text);
IPAddress TransAddress = IPAddress.Parse(AddressText.Text.ToString());
if (TransAddress == null)
{
MessageBox.Show("错误:无可用地址");
return;
}
//使用TCP发送数据
string TranText = TransFormText.Text;
using (TcpClient tcpClient = new TcpClient())
{
tcpClient.Connect(TransAddress, port);
using (NetworkStream networkStream = tcpClient.GetStream())
{
// 将字符串转换为字节数组
byte[] data = Encoding.UTF8.GetBytes(TranText);
// 发送数据
networkStream.Write(data, 0, data.Length);
}
}
}
发送数据的代码中,我们需要将我们的文本内容转换成字节数组,之后根据文本框中的目标地址,将数据发送出去。

嘉立创PCB


登录 或 注册 后才可以进行评论哦!
还没有评论,抢个沙发!