WinForm之TCP服务端

news2024/11/24 17:05:02

目录

一 原型

二 源码


一 原型

二 源码

using System.Net;
using System.Net.Sockets;
using System.Text;

namespace TCP网络服务端通讯
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        TcpListener listener = null;
        TcpClient handler = null;
        NetworkStream stream = null;
        bool isrun = false;

        private void openServer_Click(object sender, EventArgs e)
        {

            if (IP.Text.Trim().Length < 9 && Port.Text.Trim().Length == 0)
            {
                MessageBox.Show("IP和端口无效");
                return;
            }
            listener = new TcpListener(IPAddress.Parse(IP.Text), int.Parse(Port.Text));
            listener.Start();
            isrun = true;
        }

        private void send_Click(object sender, EventArgs e)
        {
            if (stream != null)
            {
                byte[] buffer = Encoding.UTF8.GetBytes(log.Text);
                stream.Write(buffer, 0, buffer.Length);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            IP.Text = "127.0.0.1";
            Port.Text = "9800";
            try
            {

                Task.Run(() =>
                {
                    while (true)
                    {
                        if (isrun && listener != null)
                        {
                            handler = listener.AcceptTcpClient();
                            stream = handler.GetStream();
                            byte[] buffer = new byte[1024];

                            if (stream != null)
                            {
                                stream.Read(buffer, 0, buffer.Length);
                                this.BeginInvoke(new Action(() =>
                                {
                                    log.Text = Encoding.UTF8.GetString(buffer);
                                }));
                            }
                        }
                        Thread.Sleep(50);
                    }
                });
            }
            catch (Exception)
            {

            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            isrun = false;
            if (listener != null)
            {
                listener.Stop();
            }

        }
    }
}

设计器自动生成代码:

namespace TCP网络服务端通讯
{
    partial class Form1
    {
        /// <summary>
        ///  Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        ///  Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        ///  Required method for Designer support - do not modify
        ///  the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            label1 = new Label();
            label2 = new Label();
            IP = new TextBox();
            Port = new TextBox();
            openServer = new Button();
            log = new RichTextBox();
            send = new Button();
            SuspendLayout();
            // 
            // label1
            // 
            label1.AutoSize = true;
            label1.Location = new Point(42, 52);
            label1.Name = "label1";
            label1.Size = new Size(22, 20);
            label1.TabIndex = 0;
            label1.Text = "IP";
            // 
            // label2
            // 
            label2.AutoSize = true;
            label2.Location = new Point(42, 102);
            label2.Name = "label2";
            label2.Size = new Size(39, 20);
            label2.TabIndex = 1;
            label2.Text = "端口";
            // 
            // IP
            // 
            IP.Location = new Point(111, 52);
            IP.Name = "IP";
            IP.Size = new Size(291, 27);
            IP.TabIndex = 2;
            // 
            // Port
            // 
            Port.Location = new Point(111, 102);
            Port.Name = "Port";
            Port.Size = new Size(291, 27);
            Port.TabIndex = 3;
            // 
            // openServer
            // 
            openServer.Location = new Point(42, 173);
            openServer.Name = "openServer";
            openServer.Size = new Size(360, 29);
            openServer.TabIndex = 4;
            openServer.Text = "打开服务器";
            openServer.UseVisualStyleBackColor = true;
            openServer.Click += openServer_Click;
            // 
            // log
            // 
            log.Location = new Point(42, 224);
            log.Name = "log";
            log.Size = new Size(360, 238);
            log.TabIndex = 5;
            log.Text = "";
            // 
            // send
            // 
            send.Location = new Point(42, 468);
            send.Name = "send";
            send.Size = new Size(360, 29);
            send.TabIndex = 6;
            send.Text = "发送";
            send.UseVisualStyleBackColor = true;
            send.Click += send_Click;
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(414, 516);
            Controls.Add(send);
            Controls.Add(log);
            Controls.Add(openServer);
            Controls.Add(Port);
            Controls.Add(IP);
            Controls.Add(label2);
            Controls.Add(label1);
            MaximizeBox = false;
            Name = "Form1";
            Text = "TCP服务端";
            FormClosing += Form1_FormClosing;
            Load += Form1_Load;
            ResumeLayout(false);
            PerformLayout();
        }

        #endregion

        private Label label1;
        private Label label2;
        private TextBox IP;
        private TextBox Port;
        private Button openServer;
        private RichTextBox log;
        private Button send;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1821387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未实施数据加密的企业,如何快速符合等保2.0标准?

企业若未实施数据加密&#xff0c;想要快速符合等保2.0标准&#xff0c;可以遵循以下步骤&#xff1a; 风险评估与规划&#xff1a; • 首先&#xff0c;进行全面的信息安全风险评估&#xff0c;识别数据处理的关键环节、敏感信息类型及其存储、传输路径。 • 基于评估结果&…

【SpringBoot + Vue 尚庭公寓实战】公寓杂费接口实现(八)

【SpringBoot Vue 尚庭公寓实战】公寓杂费接口实现&#xff08;八&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】公寓杂费接口实现&#xff08;八&#xff09;1、公寓杂费业务介绍2、公寓杂费逻辑模型介绍3、接口实现3.1、保存或更新杂费值3.2、保存或更新杂费名称3…

使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型

开源的大模型在理解和遵循指令方面都表现十分出色。但是这些模型都有审查的机制&#xff0c;在获得被认为是有害的输入的时候会拒绝执行指令&#xff0c;例如会返回“As an AI assistant, I cannot help you.”。这个安全功能对于防止误用至关重要&#xff0c;但它限制了模型的…

大数据同步方案怎么选,才能提高企业的业务效率?

大数据同步通常指的是在多个数据源或存储系统之间同步数据的过程&#xff0c;可以确保数据的一致性&#xff0c;提高数据的可用性和可靠性&#xff0c;同时支持数据分析和决策制定。 大数据同步的步骤通常包括&#xff1a; 数据识别&#xff1a;确定需要同步的数据类型和范围&…

《Brave New Words 》9.1 AI 世界中的就业

Part IX: Work and What Comes Next 第九部分&#xff1a;工作及其未来发展 The one who plants trees, knowing that he will never sit in their shade, has at least started to understand the meaning of life. —Rabindranath Tagore 种树的人&#xff0c;虽然知道他永远…

next.js开发中页面回退时报Unhandled Runtime ErrorTypeError destroy is not a function

Next.js开发中页面回退时报Unhandled Runtime Error:TypeError: destroy is not a function 问题描述 在Next.js开发中&#xff0c;从A页面跳转到B页面&#xff0c;再使用浏览器回退到A页面时报上述错误&#xff1a; 错误原因 是因为在B页面里&#xff0c;在使用useEffect时…

python接入汇率换算工具提高网站/小程序日活度

实时汇率换算工具可以帮助用户快速准确地计算不同货币之间最新的汇兑比例。无论是金融从业者或者是人们日常生活出行都会使用到&#xff0c;广泛用于国际结算、银行汇率查询应用、开展跨国贸易、投资等参考场景。 我们可以通过在网站或者小程序中接入这样一个小工具&#xff0…

HIGHLANDS - Stylized Environment(山林场景系统)

HIGHLANDS是一个游戏制作工具,包含制作游戏所需的一切。使用一系列模型创建自己的3D世界,使用着色器对其进行自定义,使用粒子效果使其栩栩如生,使用专为此软件包创建的132种声音使场景听起来栩栩如生。 该软件包已针对PC和游戏机进行了优化,尚未在移动和VR平台上进行测试。…

AI视频教程下载-用ChatGPT使Elementor创建高转化率的Clickbank漏斗

Elementor & ChatGPT_ Build Clickbank Bridge Funnel in 2Hours 在WordPress上进行联盟营销&#xff1a;使用Elementor创建高转化率的Clickbank漏斗&#xff1b;无需ClickFunnels&#xff0c;借助ChatGPT。 将您的联盟营销梦想变为现实——轻松且经济实惠&#xff01;解锁…

网站建设中是什么意思

网站建设&#xff08;Website Development&#xff09;是指根据网站的需求&#xff0c;利用各种技术和工具对网站进行策划、设计、开发和测试的过程。一个成功的网站建设过程包括了多个阶段和环节&#xff0c;其中包括需求分析、网站设计、网站开发、测试和发布等。 需求分析是…

k8s+springcloud+nacos部署配置

1 k8s 部署nacos-2.1.2配置k8s-nacos-statefulSet.yaml文件 apiVersion: v1 kind: Service metadata:name: nacos-headlessnamespace: rz-dtlabels:app: nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec:# 3个端口打开&…

[vue2]智慧商城app

项目演示 查看项目效果, 明确功能模块 项目收获 通过该项目的学习, 可以收获的内容 创建项目 创建命令: vue create hm-shopping-app清理项目多余文件清理 路由配置文件 和 App.vue文件新增 API接口目录 和 utils工具方法目录 vant组件库 第三方封装好了很多的组件, 整合起…

数据中台-知识图谱平台

【数据分析小兵】专注数据中台产品领域,覆盖开发套件,包含数据集成、数据建模、数据开发、数据服务、数据可视化、数据治理相关产品以及相关行业的技术方案的分享。对数据中台产品想要体验、做二次开发、关注方案资料、做技术交流的朋友们&#xff0c;可以关注我。 1. 概述 随着…

LabVIEW开发需求制定与管理

LabVIEW开发中的需求制定是确保项目成功的关键环节。本文从用户和开发者的角度详细分析了需求涉及的方面、需求的意义、好的需求和不好需求的区别及其对开发进度和质量的影响&#xff0c;帮助用户和开发者更好地进行需求管理&#xff0c;提升项目的成功率和软件质量。 一、需求…

【CT】LeetCode手撕—5. 最长回文子串

目录 题目1-思路2- 实现⭐5. 最长回文子串——题解思路 3- ACM实现 题目 原题连接&#xff1a;5. 最长回文子串 1-思路 子串的定义&#xff1a;子串是原始字符串的一个连续部分子序列的定义&#xff1a;子序列是原始字符串的一个子集记录最长回文子串的起始位置以及其长度&am…

H5小程序视频编辑解决方案,广泛适用,灵活部署

如何在微信小程序、网页、HTML5等WEB场景中实现轻量化视频制作&#xff0c;满足多样化的运营需求&#xff0c;一直是企业面临的挑战。美摄科技凭借其在视频编辑领域的深厚积累和创新技术&#xff0c;为企业量身打造了一套H5/小程序视频编辑解决方案&#xff0c;助力企业轻松应对…

批量文件重命名技巧:轻松替换删除文件夹名中的字母,实现高效文件管理新境界

在数字化时代&#xff0c;我们每天都会面对大量的文件和文件夹。无论是工作文档、学习资料还是个人收藏&#xff0c;文件命名的规范性都显得尤为重要。然而&#xff0c;手动一个一个去修改文件名&#xff0c;不仅耗时耗力&#xff0c;还容易出错。那么&#xff0c;有没有一种方…

C++并发之定时互斥(std::timed_mutex)

目录 1 概述2 使用实例3 接口使用3.1 construct3.2 lock3.3 try_lock3.4 try_lock_for3.5 try_lock_until3.6 unlock 1 概述 定时互斥是一种时间可锁定的对象&#xff0c;它设计用于在代码的关键部分需要独占访问时发出信号&#xff0c;就像常规互斥一样&#xff0c;但还支持定…

树莓派4B学习笔记8:开机自启动Python脚本_kill关闭后台脚本

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 紧接着上篇文章学习的串口通信,今日学习如何让树莓派开机…

zabbix自定义监控mysql状态和延迟

zabbix自定义监控mysql状态和延迟 文章目录 zabbix自定义监控mysql状态和延迟zabbix自定义监控mysql状态配置主从配置自定义监控添加监控项添加触发器模拟测试异常 zabbix自定义监控mysql延迟配置自定义监控添加监控项添加触发器测试 zabbix自定义监控mysql状态 配置主从 1.安…