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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐阳 中级黑马   /  2012-8-31 11:35  /  2461 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是代码,我学着老师的视频想先从服务端调试向客户端发送文件,然后想试着,从客户端向客户端发送文件。可是才刚刚开始就遇到困难。从服务端向客户端发送文件不成功。

ChatRoom.zip

96.82 KB, 下载次数: 215

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

倒序浏览
【分享】服务器端向客户端发送消息,客户端接收消息

         //通过IP地址和端口创建网络节点对象
          IPAddress address=IPAddress.Parse(服务器Ip地址);
          IPEndPoint endpoint=new IPEndPoint(address,int.Parse(端口));

          //创建一个套接字(工具,固定代码)
          Socket socketWatch =new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

           //将套接字绑定到唯一的网络节点上
           socketWatch.Bind(endpoint);

           //设置监听队列长度
           socketWatch.Listen(10);

          //创建一个Dictory<string,Socket> 用来存储所有与服务器通信的套接字
          Dictory<string,Socket> dic=new Dictory<string,Socket>;

         //通过线程为每一个与之连接的客服端分配一个Socket对象:
         Thread threadWatch=new Thread(WatchConnecting);//创建负责监听的线程,并传入监听方法
         threadWatch.IsBackground=true;//设置为后台线程
         threadWatch.Start();//开启线程
   
          //获取与要发送信息的客户端套接字,并调用方法发送消息
          string strMsg="要发送的消息";
          byte[] arrMsg=System.Text.Encoding.UTF8.GetBytes(strMsg);
          dic[lbOnline.Text].Send(arrMsg);//从lbOnline控件中取得网络节点信息,并从套接字集合里获得客户端套接字
         
          //创建监听方法   
         void WatchConnecting()
         {
                while(true)
               {
                       //开始监听,一旦监听到客户端的连接请求,就分配一个与之对应的通信套接字
                       Socket sokConnection=socketWatch.Accept();

                      //将每一个通信套接字存入Dictory<string,Socket> dic
                      dic.Add(sokConnection.RemoteEndPoint.ToString(),socketWatch);

                     //将sokConnection的客户端网络节点保存到一个容器里面,假设有一个listBox lbOnline
                     lbOnline.Items.Add(sokConnection.RemoteEndPoint.ToString());
                    MessageBox.showDialog("有新的客户端成功连接!");
         }

   
回复 使用道具 举报
许庭洲 发表于 2012-8-31 14:25
【分享】服务器端向客户端发送消息,客户端接收消息

         //通过IP地址和端口创建网络节点对象

老师,您好,我要提的问题可能被我弄的很难理解,其实是,当我发送文件时,另外一端接收不了文件,不会弹出那个保存文件的窗口
回复 使用道具 举报
原来是WIN7搞的鬼,设置一下线程就好。还好有前辈遇到过这个问题,设置线程
thr.SetApartmentState(ApartmentState.STA);
回复 使用道具 举报
徐阳 发表于 2012-8-31 15:12
原来是WIN7搞的鬼,设置一下线程就好。还好有前辈遇到过这个问题,设置线程
thr.SetApartmentState(Apartme ...

是吧!太有才了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马