Socket编程

来源:互联网 发布:淘宝大学怎么退订 编辑:程序博客网 时间:2024/05/16 00:56

最近在学习Socket编程,将自己学习的分享出来,请大家指教。


程序源代码地址:



1、Socket通信的基本流程图


2、服务器端:

(1)winform界面


(2)创建用于监听的Socket:

         Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

(3)设置端口号对象
                IPAddress ip = IPAddress.Any;
                IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));

(4)开始监听,并设置当前时间最大客户容量
                socketWatch.Bind(point);

                socketWatch.Listen(10);

(5)开启新线程,用于接收客户端的连接,每有一个新的连接,就创建一个新的连接Socket。同时,为了保存每一个连接的Socket,创建一个键值对进行保存。
                Thread th = new Thread(Waite);
                th.IsBackground = true;
                th.Start(socketWatch);


         //将远程连接的客户端的IP地址和Socket存入到集合中
         Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();


        void Waite(object o)
        {
            Socket socketWatch = o as Socket;
            while (true)
            {
                Socket socketSend = socketWatch.Accept();
                //将远程连接的客户端的IP地址和Socket存入到集合中
                dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
                //将远程连接的客户端的IP地址和端口号存储下拉框中
                comboBox1.Items.Add(socketSend.RemoteEndPoint.ToString());

            }
        }

(6)在上述用于通信的Socket中,开启一个新线程,用于接收客户端发送过来的信息

                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);


        void Recive(object o)
        {
             socketSend = o as Socket;
            while (true)
            {
                byte[] buffer = new byte[1024 * 1024 * 3];
                int r = socketSend.Receive(buffer);
                if (r == 0)
                {
                    break;
                }
                string ss = System.Text.Encoding.UTF8.GetString(buffer);
            }
        }

(7)服务器端向客户端发送信息

            string str = txtMsg.Text.Trim();
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
            //获得用户在下拉框中选中的IP地址
            string ip = comboBox1.SelectedItem.ToString();
            dicSocket[ip].Send(buffer);


3、客户端

(1)winform界面

(2)在客户端创建一个用户通信的Socket
                 socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ip = IPAddress.Parse(textBox1.Text);
                IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
(3)进行连接
                socketSend.Connect(point);

(4)开启一个新的线程,用于接收服务器端发送的消息

                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);


            void Recive(object o)
           {
                socketSend = o as Socket;
                while (true)
               {
                    byte[] buffer = new byte[1024 * 1024 * 3];
                    int r = socketSend.Receive(buffer);
                    if (r == 0)
                    {
                         break;
                    }
                   string ss = System.Text.Encoding.UTF8.GetString(buffer);
               }
           }

(5)发送消息

                string str = txtMsg.Text.Trim();
                byte[] buffer=System.Text.Encoding.UTF8.GetBytes(str);
                socketSend.Send(buffer);



分享到这里,如有错误,请指出










0 0