基于WCF的消息推送服务研究与实现(5)
时间:2017-04-28 12:54 来源:毕业论文 作者:毕业论文 点击:次
(1) 使用异步方式进行服务器监听 通过异步方式进行服务器监听,无需阻塞,只要调用BeginAccept方法后,就可以继续执行后面的代码了。BeginAccept方法中,需要指定一个委托,当有连接请求到来时,由它来处理,代码如下: serverSock = new Socket (AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp); serverSock.Bind (new IPEndPoint (IPAddress.Parse (_ip),_port)); serverSock.Listen(10); serverSock.BeginAccept(new AsyncCallback(OnConnectRequest),serverSock); 异步的连接事件处理中,将为请求的连接建立一个新的连接: private void OnConnectRequest(IAsyncResult ar){ Socket listener = (Socket)ar.AsyncState; Socket link = listener.EndAccept(ar);//新的连接 …… (2) 异步的数据发送和接收 当建立连接后,需要为连接指定异步的接收方法和异步发送方法。由于发送过程往往是主动的,可以由用户控制,而接收过程则需要等待,所以异步接收更有实际意义。异步的接收方法是: AsyncCallback recieveData = new AsyncCallback (OnRecievedData); sock.BeginReceive (msgBuff, 0, msgBuff.Length, Socket-Flags.None, recieveData, sock); 而指定的异步接收委托方法是: private void OnRecievedData(IAsyncResult ar){ Socket sock = (Socket)ar.AsyncState; int nBytesRec = sock.EndReceive(ar); string sRecieved = Encoding.ASCII.GetString(msgBuff, 0, nBytesRec); 对于发送,既可以用同步的发送方法Send,也可以用异步的方法BeginSend,其处理方法和接收相似。 (3) 连接过程 对客户端而言,可以用异步方法BeginConnect连接到服务器端。 _sock.BeginConnect(epServer, new AsyncCallback(OnConnect),_sock); 该方法设定的连接建立处理OnConnect中,可以从参数中获得建立的连接。 Socket sock = (Socket)ar.AsyncState; sock.EndConnect(ar); 3. 基于WCF消息推送服务的设计 (责任编辑:qin) |