• C#——Socket


    最近公司让我搞个socket小程序(服务端)。

    主要的功能:客户端发字符串到服务端,服务端接收后在界面上显示。

    参照了网上许多代码,自己从中修改整理代码。

     public Form4()
            {
                InitializeComponent();
                this.Width = 1298;
                this.Height = 841;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Enabled = true;
                timer.Interval = 60000;//执行间隔时间,单位为毫秒   
                timer.Start();
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                //设置IP和端口
                SetServerIPAndPort();
    
            }
             /// <summary>
            /// 根据当前程序目录的文本文件‘ServerIPAndPort.txt’内容来设定IP和端口
            /// 格式:127.0.0.1:8885
            /// </summary>
            private void SetServerIPAndPort()
            {
                try
                {
    
                    FileStream fs = new FileStream("ServerIPAndPort.txt", FileMode.Open);
                    StreamReader sr = new StreamReader(fs);
                    string IPAndPort = sr.ReadLine();
    
                    ServerIP = IPAndPort.Split(':')[0]; //设定IP
                    //ServerIP = GetLocalIPAddress();//设定IP
                    port = int.Parse(IPAndPort.Split(':')[1]); //设定端口
                    Timer_out = int.Parse(IPAndPort.Split(':')[2]);//设定连接超时时间(毫秒)
                    ipEnd = new IPEndPoint(IPAddress.Parse(ServerIP), port);
                    //定义套接字类型
                    serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    //连接
                    serverSocket.Bind(ipEnd);
                    //开始侦听
                    serverSocket.Listen(10);
                    //AddItemToListBox(string.Format("开始在{0}监听连接", ServerIP, port));
                    Thread myThread = new Thread(ListenClientConnect);
                    myThread.Start();  
                    sr.Close();
                    fs.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("配置IP与端口失败,错误原因:" + ex.Message);
                    Application.Exit();
                }
            }   
            /// <summary>  
            /// 监听客户端连接  
            /// </summary>
            private void ListenClientConnect()
            {
                Socket clientSocket = null;
                while (true)
                {
                    try
                    {
                        clientSocket = serverSocket.Accept();
                    }
                    catch {
                        //当单击‘停止监听’或者退出此窗体时 AcceptTcpClient() 会产生异常
                        //因此可以利用此异常退出循环
                        break;
                    }
                    //clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
                    Thread receiveThread = new Thread(ReceiveMessage);
                    receiveThread.Start(clientSocket);
                }
            }    
            /// <summary>
            /// 接收数据
            /// </summary>
            /// <param name="socket"></param>
            /// <param name="timeout"></param>
            /// <returns></returns>
            private string Receive(Socket socket)
            {
    
                string result = string.Empty;
                //socket.ReceiveTimeout = Timer_out * 1000 * 60;
                List<byte> data = new List<byte>();
                byte[] buffer = new byte[1024];
                int length = 0;
                try
                {
                    while ((length = socket.Receive(buffer)) > 0)
                    {
                        for (int j = 0; j < length; j++)
                        {
                            data.Add(buffer[j]);
                        }
                        if (length < buffer.Length)
                        {
                            break;
                        }
                    }
                }
                catch { }
                if (data.Count > 0)
                {
                    result = Encoding.Default.GetString(data.ToArray(), 0, data.Count);
                }
                return result;
            }
            /// <summary>  
            /// 接收消息  
            /// </summary>  
            /// <param name="clientSocket"></param>
            private void ReceiveMessage(object clientSocket)
            {
                flg = true;
                myClientSocket = (Socket)clientSocket;
                byte[] result = new byte[1024];
                while (flg)
                {
                    try
                    {
                        //通过clientSocket接收数据  
                        //int receiveNumber = myClientSocket.Receive(result,result.Length,0);
                        //AddItemToListBox(Encoding.Unicode.GetString(result, 0, receiveNumber));
                        AddItemToListBox(Receive(myClientSocket));
                        flg = false;
                        //break;
                    }
                    catch (Exception ex)
                    {
                        AddItemToListBox(ex.Message);
                        myClientSocket.Shutdown(SocketShutdown.Both);
                        myClientSocket.Close();
                        break;
                    }
                }
            }
    View Code
  • 相关阅读:
    织梦DedeCms网站首页不生成html文件动态显示方法
    PHP7.0下安装DEDE织梦 出现 GD不支持的解决方法
    DEDECMS5.7支持伪静态的方法
    DEDECMS全站伪静态设置方法
    设置 SSH 通过密钥登录
    Windows安装OpenSSH服务
    VS Code远程开发工具错误-找不到SSH安装
    帝国CMS自定义列表的排序
    帝国CMS灵动标签e:loop的使用方法
    cisco 3750交换机堆叠后配置恢复方法
  • 原文地址:https://www.cnblogs.com/witeem/p/5253309.html
Copyright © 2020-2023  润新知