C# WinForm实现TCP收发信息

这篇具有很好参考价值的文章主要介绍了C# WinForm实现TCP收发信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需要定义

         /// <summary>
        /// 负责通信的socket
        /// </summary>
        Socket socketSend;
        /// <summary>
        /// 负责监听Socket
        /// </summary>
        Socket socket;
        /// <summary>
        /// 存放连接的socket
        /// </summary>
        Dictionary<string, Socket> dictionary = new Dictionary<string, Socket>();

监听IP、端口

 //取消跨线程检查
            Control.CheckForIllegalCrossThreadCalls = false;
            //将窗口最大化
            this.WindowState = FormWindowState.Maximized;
            //创建监听的socket,
            //SocketType.Stream 流式对应tcp协议
            //Dgram,数据报对应UDP协议
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //创建IP地址和端口号
            IPAddress ip = IPAddress.Parse("192.166.2.48");//IPAddress.Parse(textServerIP.Text);
            int port = Convert.ToInt32(5555);
            IPEndPoint iPEndPoint = new IPEndPoint(ip, port);
            //让负责监听的Socket绑定ip和端口号
            socket.Bind(iPEndPoint);
            using (StreamWriter sw = new StreamWriter(filePath, true)) { sw.WriteLine("监听成功!" + ip + ";" + port + ":\t" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); }
                   
            //设置监听队列
            socket.Listen(10);//一段时间内可以连接到的服务器的最大数量
            Thread thread = new Thread(Listen);
            thread.IsBackground = true;
            thread.Start(socket);
  /// <summary>
        /// 使用线程来接收数据
        /// </summary>
        /// <param name="o"></param>
        private void Listen(object o)
        {
            Socket socket = o as Socket;
            while (true)
            {
                //负责监听的socket是用来接收客户端连接
                //创建负责通信的socket
                socketSend = socket.Accept();
                dictionary.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
               // clientCombo.Items.Add(socketSend.RemoteEndPoint.ToString());      
                //开启新线程,接收客户端发来的信息
                Thread th = new Thread(receive);
                th.IsBackground = true;
                th.Start(socketSend);
            }
        }
  
        //服务器接收客户端传来的消息
        private void receive(object o)
        {
            Socket socketSend = o as Socket;
            while (true)
            {
                try
                {
                    //客户端连接成功后,服务器接收客户端发来的消息
                    byte[] buffer = new byte[1024 * 1024 * 2];//2M大小
                    //接收到的有效字节数
                    int length = socketSend.Receive(buffer);
                    if (length == 0)
                    {
                        using (StreamWriter sw = new StreamWriter(filePath, true)) { sw.WriteLine("TCP连接下线了:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); }
                        
                        dictionary[socketSend.RemoteEndPoint.ToString()].Shutdown(SocketShutdown.Both);
                        dictionary[socketSend.RemoteEndPoint.ToString()].Disconnect(false);
                        dictionary[socketSend.RemoteEndPoint.ToString()].Close();
                        break;
                    }
                    string str = Encoding.ASCII.GetString(buffer, 0, length);
                    //接收过来的消息
                    if (str.Length > 0)
                    {
                        TCPStr = str;
                    }
                  
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }

发送消息文章来源地址https://www.toymoban.com/news/detail-621122.html

  		 Socket socket;       //连接
        private void connectBtn_Click(object sender, EventArgs e)
        {
            try
            {
                //创建负责通信的socket
                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //地址、端口
                IPAddress ip = IPAddress.Parse("192.166.2.48");
                int serverPort = Convert.ToInt32(5555);
                IPEndPoint port = new IPEndPoint(ip, serverPort);
                //连接到服务器
                socket.Connect(port);
                //启动接收数据线程
                Thread th = new Thread(receive);
                th.IsBackground = true;
                th.Start();
            }
            catch { }
        }   
         /// <summary>
        /// 发消息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void sendMsgBtn_Click(object sender, EventArgs e)
        {
            try
            {
                string txt = textBox1.Text;
                byte[] buffer = Encoding.ASCII.GetBytes(txt);//ascii编码
                socket.Send(buffer);
            }
            catch { }
        }

到了这里,关于C# WinForm实现TCP收发信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#桌面程序(winform)如何一步步集成内置WebApi(owin技术),解耦IIS,并将Api接收信息推给桌面窗体控件展示

    最近工厂有个需求,服务器上部署了一个服务,此服务要把信息推送给现场多台工控机上的CS上位机程序。由于涉及到多个软件之间的通信,做架构时,首先排除掉中间表形式,从效率和稳定性上也排除掉了Socket,最后采用了WebApi接口形式来做通信。但是有个问题,上位机程

    2023年04月08日
    浏览(46)
  • 【JavaEE】从收发消息的角度理解 TCP/IP 五层网络模型的封装与分用

    你问我为啥需要分层?那必然是有好处的啊! 我们来回顾一下面向接口编程有什么特点~ 对于使用方来说,不必关心提供方是如何实现的, 只需要使用接口即可; 对于提供方来说,只需要利用封装的特性,隐藏内部实现细节,对外开发接口。 而对于协议的分层也是类似,后

    2024年02月03日
    浏览(33)
  • C#使用TCP/IP长连接获取数据、心跳检测

    逻辑处理 创建一个Socket对象并连接到服务器,可以使用Socket.Connect()方法。 使用Socket.Send()方法发送数据到服务器。 使用Socket.Receive()方法接收服务器返回的数据。 实现心跳检测,可以定时向服务器发送一个心跳包,如果服务器没有响应,则说明连接已断开。 如果连接断开,

    2024年02月13日
    浏览(67)
  • [ C# ] C#中TCP服务端的实现

           本文所用例子为个人学习的小结,如有不足之处请各位多多海涵,欢迎小伙伴一起学习进步,如果想法可在评论区指出,我会尽快回复您,不胜感激!         所公布代码或截图均为运行成功后展示。         嘿嘿,小小免责声明一下!部分代码可能与其他网

    2024年01月18日
    浏览(39)
  • TCP服务器的C#实现

    1、TCP实现类 2、页面布局 3、后台代码 4、运行结果

    2024年02月09日
    浏览(46)
  • 【Unity】Socket网络通信(TCP) - 最基础的C#服务端通信流程

    我这里新建了一个C#控制台项目来写服务端代码。 下面是基于C# Socket的最基础服务端通信流程: 创建服务端Socket对象 绑定IP地址和端口 设置最大监听客户端数量 等待客户端连接 收发消息 释放连接 基于上面流程就能实现一个最简单并且能和客户端通信的服务器程序,每个步

    2023年04月16日
    浏览(64)
  • C#网络编程TCP程序设计(Socket类、TcpClient类和 TcpListener类)

    目录 一、Socket类 1.Socket类的常用属性及说明 2.Socket类的常用方法及说明 二、TcpClient类 三、TcpListener类  四、示例 1.源码 2.生成效果         TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在C#中,TCP程序设计是指利用 Socket类、T c

    2024年02月04日
    浏览(49)
  • 【C#】WCF和TCP消息通信练习,实现聊天功能

    主页面 聊天界面

    2024年02月08日
    浏览(44)
  • ModbusRTU\TCP消息帧解析(C#实现报文发送与解析)

    PLC寄存器中存储(整型和无符号整型:2字节。长整型:4字节。单精度浮点数:4字节。双精度浮点数:8字节),我们只要知道数据类型,是2个字节一截取,还是4个字节 ,对接收到的报文进行字节截取然后编码成str就行 向PLC中写入Float,float占4个字节=2个寄存器,所以要使用

    2024年02月03日
    浏览(50)
  • C# 使用NModbus4进行TCP读取,并且实现自动断线重连

    C# 使用NModbus4进行TCP读取,并且实现自动断线重连

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包