using System.Net;
using System.Net.Sockets;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Service
{
internal class SocketManager
{
#region 属性
///
/// 客户端专用Socket
///
internal static Socket? Socket => _Socket;
///
/// 服务器端专用Socket
///
internal static Socket? ServerSocket => _ServerSocket;
private static Socket? _Socket = null;
private static Socket? _ServerSocket = null;
#endregion
#region 实现
///
/// 创建服务器监听Socket
///
/// 监听端口号
/// 最大连接数量
/// 服务器端专用Socket
internal static Socket? StartListening(int Port = 22222, int MaxConnection = 0)
{
if (MaxConnection <= 0) MaxConnection = SocketSet.MaxConnection_2C2G;
try
{
_ServerSocket = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ServerEndPoint = new(IPAddress.Any, Port);
_ServerSocket.Bind(ServerEndPoint);
_ServerSocket.Listen(MaxConnection);
_ServerSocket.NoDelay = true;
return _ServerSocket;
}
catch
{
ServerSocket?.Close();
}
return null;
}
///
/// 创建一个监听到客户端Socket
///
/// 客户端IP地址[0]和客户端Socket[1]
internal static object[] Accept()
{
if (ServerSocket is null) return Array.Empty