using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; namespace IoTServer.Servers { /// /// ServerSocket基类 /// public class ServerSocketBase { /// /// 分批缓冲区大小 /// protected const int BufferSize = 4096; /// /// 读取 /// /// socket /// 读取长度 /// protected byte[] SocketRead(Socket socket, int receiveCount) { byte[] receiveBytes = new byte[receiveCount]; int receiveFinish = 0; while (receiveFinish < receiveCount) { // 分批读取 int receiveLength = (receiveCount - receiveFinish) >= BufferSize ? BufferSize : (receiveCount - receiveFinish); var readLeng = socket.Receive(receiveBytes, receiveFinish, receiveLength, SocketFlags.None); if (readLeng == 0) { if (socket.Connected) socket.Shutdown(SocketShutdown.Both); socket.Close(); throw new Exception("连接已断开"); } receiveFinish += readLeng; } return receiveBytes; } } }