任何好的教程/示例Asynchronous Socket都带有线程池代码,允许发送或接收多次

时间:2014-07-02 09:32:41

标签: c# .net sockets asynchronous

任何好的教程/示例带有线程池代码的异步套接字并允许发送或接收多次?

我尝试了Microsoft示例异步服务器示例和异步客户端示例,它只允许接收或发送一次然后结束会话。http://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx我不知道如何允许多次接收或发送数据。

我想要做的是服务器&客户端验证过程,使用签名和AES,验证客户端是真正的客户端,服务器是真正的服务器。

这是我计划执行的以下验证步骤

  1. 客户端将生成一个哈希并发送到服务器。
  2. 服务器将接收哈希并加密其私钥并发送加密的哈希&公钥回到客户端。
  3. 客户端接收服务器的公钥和加密的哈希值,并使用服务器的公钥解密加密的哈希值。
  4. 客户端将解密的哈希与客户端发送的哈希进行比较,它是相同的,如果结果相同,则客户端将加密AES密钥&我使用服务器的公钥然后发送到服务器。
  5. 当服务器收到加密的AES密钥& IV,服务器将使用他的私钥解密它,然后使用AES密钥& IV加密哈希,然后将其发送给客户端。
  6. 客户端恢复加密的哈希并使用AES密钥& IV再次解密和比较。

1 个答案:

答案 0 :(得分:0)

我认为你描述的协议可以自己实现,但是在从套接字发送和接收数据方面,有一个来自Stephen Toub的article创建了一个允许轻松发送的SocketAwaitable /异步接收数据。

从文章中你可以这样使用它:

static async Task ReadAsync(Socket s) 
{ 
    // Reusable SocketAsyncEventArgs and awaitable wrapper 
    var args = new SocketAsyncEventArgs(); 
    args.SetBuffer(new byte[0x1000], 0, 0x1000); 
    var awaitable = new SocketAwaitable(args);

    // Do processing, continually receiving from the socket 
    while (true) 
    { 
        await s.ReceiveAsync(awaitable); 
        int bytesRead = args.BytesTransferred; 
        if (bytesRead <= 0) break;

        /* Process bytes read here */
    } 
}