Слияние кода завершено, страница обновится автоматически
using IoTClient.Models;
using System;
using System.Net.Sockets;
namespace IoTClient.Core
{
/// <summary>
/// Socket基类
/// </summary>
public abstract class SocketBase
{
/// <summary>
/// 分批缓冲区大小
/// </summary>
protected const int BufferSize = 4096;
/// <summary>
/// Socket实例
/// </summary>
protected Socket socket;
/// <summary>
/// 是否自动打开关闭
/// </summary>
protected bool isAutoOpen = true;
/// <summary>
/// 打开连接
/// </summary>
/// <returns></returns>
public Result Open()
{
isAutoOpen = false;
return Connect();
}
protected abstract Result Connect();
/// <summary>
/// 关闭连接
/// </summary>
/// <returns></returns>
public bool Close()
{
isAutoOpen = true;
return Dispose();
}
/// <summary>
/// 关闭连接
/// </summary>
/// <returns></returns>
protected bool Dispose()
{
try
{
if (socket.Connected) socket?.Shutdown(SocketShutdown.Both);//正常关闭连接
socket?.Close();
return true;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 读取
/// </summary>
/// <param name="socket"></param>
/// <param name="receiveCount"></param>
/// <returns></returns>
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);
receiveFinish += socket.Receive(receiveBytes, receiveFinish, receiveLength, SocketFlags.None);
if (receiveFinish == 0)
{
if (socket.Connected) socket.Shutdown(SocketShutdown.Both);
socket.Close();
throw new Exception("连接已断开");
}
}
return receiveBytes;
}
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )