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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁晓俊 高级黑马   /  2014-4-10 00:51  /  1019 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 袁晓俊 于 2014-4-23 09:57 编辑

求socket类的详细讲解,原理知识和案例,谢谢。

评分

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

查看全部评分

1 个回复

倒序浏览
本帖最后由 许庭洲 于 2014-4-10 08:23 编辑

服务器启动并监听客户端请求
1. 通过IP地址和端口创建网络节点对象;
2. 创建一个套接字(工具,固定代码);
3. 将套接字绑定到唯一的网络节点上;
4. 设置监听队列长度;
5. 通过线程为每一个与之连接的客服端分配一个Socket对象:
6. 创建负责监听的线程,并传入监听方法;
----------------------------------------------------------------------------------------------------------------------------------
  //通过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);

   //通过线程为每一个与之连接的客服端分配一个Socket对象:
   Thread threadWatch=new Thread(WatchConnecting);//创建负责监听的线程,并传入监听方法
   threadWatch.IsBackground=true;//设置为后台线程
   threadWatch.Start();//开启线程

   //创建监听方法

   void WatchConnecting()
   {
     while(true)
     {
       //开始监听,一旦监听到客户端的连接请求,就分配一个与之对应的通信套接字
       Socket sokConnection=socketWatch.Accept();
       MessageBox.showDialog("有新的客户端成功连接!");
     }

   }
-----------------------------------------------------------------------------------------------------------------------------------
服务器端向客户端发送消息,客户端接收消息
1.通过IP地址和端口创建网络节点对象;
2.创建一个套接字(工具,固定代码);
3.将套接字绑定到唯一的网络节点上;
4.设置监听队列长度;
5.创建一个Dictory<string,Socket> 用来存储所有与服务器通信的套接字;
6.通过线程为每一个与之连接的客服端分配一个Socket对象:
7.获取与要发送信息的客户端套接字,并调用方法发送消息;
---------------------------------------------------------------------------------------------------------------------------------
//通过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("有新的客户端成功连接!");
     }

   }
-----------------------------------------------------------------------------------------------------------------------------------------

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马