极客秀
搜索

基于C#的软件大杂烩(4.2)——TCP服务端的文本接收和发送

上一期使用TCP协议接收图片数据,本期我们使用TCP协议来实现文本的接收和发送。

关于TCP协议的具体内容本文不做赘述,如果有感兴趣的伙伴可以去CSDN或者B站查看相关视频。

本期以及往期的源码都会分享到QQ交流群:656210280……感兴趣的小伙伴可以加群探讨一下。

简单的布置一下界面, 将数据接收和数据发送分开来。接收数据的部分监听我们的端口,发送数据的部分根据我们输出的端口地址来向目标地点发送数据。

并且由于逻辑的问题,使用这些内容的时候会把其他内容禁用,防止端口被占用或者重复监听。

** 接收数据 **


 private void StartListeningText()        {            try            {                // 获取选定的IP地址和端口                IPAddress ipAddress = IPAddress.Parse(IPAddressChoose.SelectedItem.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)            {                MessageBox.Show($"错误:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.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);                }            }        }

发送数据的代码中,我们需要将我们的文本内容转换成字节数组,之后根据文本框中的目标地址,将数据发送出去。

1.转载请保留原文链接谢谢!
2.本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
3.本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
4.本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
5.联系方式(#替换成@):pm#vimge.com

  相关内容