黑马程序员--C#Socket学习总结

来源:互联网 发布:c语言规则引擎 编辑:程序博客网 时间:2024/05/16 06:16

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

      网络中的计算机实现通信的前提是知道对方的IP地址和端口,然后建立通信通道最后通信,Socket就是建立计算机通信通道的类。

      服务器端创建一个监听套接字调用Listen方法来监听客户端请求,浏览器(客户端)用已知的服务器IP地址和端口号创建请求套接字调用Connect方法来向服务器发送请求  (个人认为当客户端的套接字调用Connect方法的同时也将自己的IP和端口号传输给服务器),服务器监听到客户端的请求后会调用Accept重新生成一个新的套接字 ,然后用这个新的套接字与客户端的套接字进行通信,其中服务器接受客户端请求的方法Accept会一直等待客户端发送请求过来,客户端接收服务器消息的方法receiv会一直等服务器发来消息 ,即Accept方法与receiv方法会阻塞线程,因此会创建新线程来调用这两个方法。

     C#程序实现客户端与服务器通信的代码如下:

                   服务器端程序:

                                 Socket  socketconn = null;//此套接字变量用来放监听套接字接受客户端请求后产生的一个新的套接字

                                //实例化一个TCP协议的套接字

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

                                //假设服务器IP为:192.168.0.1,绑定端口号为:8899
                                IPAddress adress = IPAddress.Parse("192.168.0.1");

                                 //创建服务器终端
                                 IPEndPoint endpoint = new IPEndPoint(adress, 8899);

                                 //绑定套接字终端
                                 WathchSocket.Bind(endpoint);

                                  //服务器开始监听
                                 WathchSocket.Listen(10);

                                 //创建一个新线程来处理客户端请求,若此处直接用WathchSocket.Accept(),则服务器端会一直等待客户端请求,应用程序会被阻塞
                                 thread = new Thread(watchconnc);
                                 thread.Start();

                                 //处理客户端请求的方法watchconnc

  void watchconnc()
        {
            while (true)//服务器端循环监听并处理客户端请求
            {
               socketconn = WathchSocket.Accept();

                //创建一个接收客户端消息的方法
               Thread receivethread = new Thread(receiv);
               receivethread.Start();
                        
            }
        }

                              //服务器端接收客户端消息的方法 

        private void receiv()
        {
            while (true)
            {
                byte[] recivemsg = new byte[1024 * 1024 * 2];
                socketconn.Receive(recivemsg);
                string remsg = System.Text.Encoding.UTF8.GetString(recivemsg);
                textBox1.AppendText(remsg+"\r\n");

            }
        }

//服务器端向客户端发送消息

 private void btsend_Click(object sender, EventArgs e)
        {
            string sendmsg = textmsg.Text.ToString().Trim();
            byte[] arrysend = System.Text.Encoding.UTF8.GetBytes(sendmsg);
            socketconn.Send(arrysend);
        }

                          客户端程序:

                                     Socket Clientsock = null;

                                     Thread receivetthread = null;

                                     //创建客户端套接字

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

                                    //客户端套接字Clientsock向服务器发送请求
                                    Clientsock.Connect(IPAddress.Parse("192.168.0.1"), 8899);

                                    //让线程receivetthread接收服务器发送来的消息
                                    receivetthread = new Thread(receiv);
                                    receivetthread.Start();

客户端接收服务器消息的方法

  private void receiv()
        {
            while (true)//循环接收服务器端消息
            {
                byte[] recivemsg = new byte[1024 * 1024 * 2];
                Clientsock.Receive(recivemsg);
                string remsg = System.Text.Encoding.UTF8.GetString(recivemsg);
            }
        }

  客户端向服务器发送消息

 private void Cbtsend_Click(object sender, EventArgs e)
        {
            string sendmsg = textmsg.Text.ToString().Trim();
            byte[] arrysend = System.Text.Encoding.UTF8.GetBytes(sendmsg);
            Clientsock.Send(arrysend);
       }

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摩托科目一考不过怎么办 人老了视力不好怎么办 2岁宝宝视力不好怎么办 唱歌音总是唱不准怎么办 考级没地方练琴怎么办 少儿声乐唱不准音该怎么办 学历认证报告编号忘记了怎么办 自考挂科10门了怎么办 高中的会考没过怎么办 毕业证和学位证丢了怎么办 大学毕业证学位证丢了怎么办 大学毕业证和学位证丢了怎么办 毕业证是士官证号码怎么办 自考本科准考证丢了怎么办 自考档案搞丢了怎么办 自考本科档案在自己手里怎么办? 本科自考准考证丢了怎么办 大学团员证丢了怎么办 大学开学团员证丢了怎么办 研究生开学没有团员证怎么办 研究生开学已经不是团员了怎么办 毕业了要搬宿舍怎么办 中专学历认证已停止怎么办 中专不做学历认证考试怎么办 大学生欠学费被扣毕业证怎么办 考警校体检没过怎么办 美国签证申请预约名字写错怎么办 当兵不从学校走怎么办 门牙崩了一小块怎么办 遇到很难过的事情怎么办 小孩子上课精力不集中怎么办 每天工作都很累压力大怎么办 重体力活搬不动怎么办 大学没参加体测怎么办 英文写的很丑怎么办 患有勃起障碍应该怎么办较好 运动过度小腿肌肉酸痛怎么办 高考有纹身是字怎么办 新生儿测听力没过关怎么办 色弱高考体检时没查出来怎么办 公司福利体检查二对半怎么办