zoukankan      html  css  js  c++  java
  • Socket通讯

    一、

    创建Windows 窗体应用(.NET Framework)项目

    1.将窗体 StartPosition 设置为 CenterScreen

    2.Test设置为:基于Scoket实现TCP服务器

    后台代码:

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                this.Load += FrmTCPServer_Load;
            }
    
            private void FrmTCPServer_Load(object sender, EventArgs e)
            {
                this.lst_Rcv.Columns[1].Width = this.lst_Rcv.ClientSize.Width - this.lst_Rcv.Columns[0].Width;
            }
    
            /*
    
            服务器端程序的编写步骤:
            第一步:调用socket()函数创建一个用于通信的套接字
            第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现
            第三步:调用listen()函数使用套接字成为一个监听套接字。
            第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。
            第五步:处理客户端的连接请求。
            第六步:终止连接
    
            */
    
            //声明一个Socket对象
            private Socket soketServer;
    
            /// <summary>
            /// 开启服务
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_StartService_Click(object sender, EventArgs e)
            {
                //第一步:调用socket()函数创建一个用于通信的套接字
                soketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                //第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用bind()函数来实现
                IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(this.txt_IP.Text), int.Parse(this.txt_Port.Text));
                try
                {
                    soketServer.Bind(ipe);
                }
                catch (Exception ex)
                {
                    //写入日志
                    AddLog(2, "服务器开启失败 "+ex.Message);
                    return;
                }
    
                //第三步:调用listen()函数使用套接字成为一个监听套接字。
                soketServer.Listen(10);
    
                //创建一个监听多线程
                Task.Run(new Action(() =>
                {
                    CheckListening();
                }));
                AddLog(0, "服务器开启成功");
    
                this.btn_StartService.Enabled = false;
            }
            /// <summary>
            /// 检查监听的线程方法体
            /// </summary>
            private void CheckListening()
            {
                while (true)
                {
                    //第四步:调用accept()函数来接受客户端的连接,这是就可以和客户端通信了。
                    Socket socketCient = soketServer.Accept();
                    Task.Run(new Action(() =>
                    {
                        ReciveMessge(socketCient);
                    }));
                }
            }
    
            /// <summary>
            /// 接受客户端数据的方法
            /// </summary>
            /// <param name="socketCient"></param>
            private void ReciveMessge(Socket socketCient)
            {
                while (true)
                {
                    //创建一个缓冲区
                    byte[] buffer = new byte[1024 * 1024 * 10];
    
                    int length = -1;
                    //第五步:处理客户端的连接请求。
    
                    length = socketCient.Receive(buffer);
                }
            }
    
            #region 接受信息的方法
    
            //当前时间属性
            private string CurrentTime
            {
                get { return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); }
            }
    
            //记录日志
            private void AddLog(int index,string info)
            {
                if (!this.lst_Rcv.InvokeRequired)
                {
                    ListViewItem lst = new ListViewItem("  " + CurrentTime, "");
    
                    lst.SubItems.Add(info);
    
                    lst_Rcv.Items.Insert(0, lst);
                }
                else
                {
                    Invoke(new Action(()=> {
                        ListViewItem lst = new ListViewItem("  " + CurrentTime, "");
    
                        lst.SubItems.Add(info);
    
                        lst_Rcv.Items.Insert(0, lst);
                    }));
                }
            }
            #endregion
        }
    作者:chenze
    出处:https://www.cnblogs.com/chenze-Index/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果文中有什么错误,欢迎指出。以免更多的人被误导。
  • 相关阅读:
    详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名
    培养正直的品德
    限定任务的时间
    SOA是什么
    软件项目管理实践之日计划
    项目管理经验的获取
    善于分解大的任务
    oracle表分区详解
    如何定义和建立架构?
    构架、框架、设计模式之间的关系简述
  • 原文地址:https://www.cnblogs.com/chenze-Index/p/13991516.html
Copyright © 2011-2022 走看看