2017-10-19 97 views
0

我是一个完整的初学者在TCP部分,我尝试编写一个主服务器,它应该处理多个500个客户端,并且延迟很小。超过500个客户端的TCP /异步接收句柄

这是我第一次尝试,你有什么建议如何改进代码,或者是我的代码完成垃圾! :d

我首先发送一个标记Uint16作为消息大小的指示器

// receive Code! 
    private byte[] indexBuffer = new byte[sizeof(UInt16)]; 
    private int indexSize = sizeof(UInt16); 

    public async void receiveData(TcpClient client) { 
     var result = await Task.Run(() => { 
      try { 
       int checkSum = client.Client.Receive(indexBuffer, 0, indexBuffer.Length, SocketFlags.None); 
       if (checkSum != indexSize) return null; 

       int packageSize = BitConverter.ToUInt16(indexBuffer, 0); 
       Console.WriteLine(packageSize); 
       var recData = new Byte[packageSize]; 

       checkSum = client.Client.Receive(recData, 0, packageSize, SocketFlags.None); 
       if (checkSum != packageSize) return null; 
       return Encoding.ASCII.GetString(recData); 
      } catch(Exception ex) { 
       Console.WriteLine(ex.Message); 
       return "-1"; 
      } 
     }); 

     // blabla do something 
     Console.WriteLine(result); 

     //--------------------- 
     if (client.Connected) 
      receiveData(client); 
    } 

回答