A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘建素 中级黑马   /  2012-7-22 14:26  /  1458 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天刚把基础的socket部分视频看完结尾处老师留了个作业是添加客户端和服务端发送消息的作业就做了一下

客户端在原来老师基础上加了这几行代码
//客户端发送消息
            string msg = txtSendMsg.Text.Trim();
            byte[] by = System.Text.Encoding.UTF8.GetBytes(msg);
            //调用socket的Send 方法发送消息
            socketSend.Send(by);
            ShowMsg("发送了数据:" + msg);

服务端在原来基础上加了:
负责监听的方法改为
//负责监听方法
        void WatchClient()
        {
            while (true)//持续监听客户端请求
            {
                //监听到的访问  注意accept方法会阻断当前线程  知道监听成功
                Socket socketConnection = watchSocket.Accept();//一旦监听到客户端请求,就返回一个负责和该客户端通信的套接字
                Thread thRec = new Thread(ReClientMsg);//创建一个负责监听接收消息的线程
                thRec.IsBackground = true;//设置为后台程序
                thRec.Start(socketConnection);//将监听到的socket作为参数传入并开启线程
                dir.Add(socketConnection.RemoteEndPoint.ToString(),socketConnection);
                listUsers.Items.Add(socketConnection.RemoteEndPoint.ToString());
                ShowMsg("客户端连接成功!"+socketConnection.RemoteEndPoint.ToString());
            }
        }


添加了一个接受客户端发送消息的方法 作为线程方法名称为ReClientMsg
/// <summary>
        /// 服务端接收客户端发送消息
        /// </summary>
        void ReClientMsg(object soc)
        {
            Socket socketSend = soc as Socket;
            //创建一个2m的缓存区用于接收用
            byte[] arrMsgRec = new byte[1024 * 1024 * 2];
            //将接收到的数据存入arrMsgRec 并返回接收到的真正数据的长度
            int count = socketSend.Receive(arrMsgRec);
            string strRec = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, count);
            ShowMsg("接收到消息为:" + strRec);
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
太有才了,值得学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马