mirror of
https://github.com/tribufu/ServerManagers
synced 2026-05-06 15:17:34 +00:00
60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Net.Sockets;
|
|
using System.Net;
|
|
|
|
namespace QueryMaster
|
|
{
|
|
internal class ServerSocket : IDisposable
|
|
{
|
|
internal static readonly int UdpBufferSize = 1400;
|
|
internal static readonly int TcpBufferSize = 4110;
|
|
internal Socket socket { set; get; }
|
|
protected internal int BufferSize = 0;
|
|
internal IPEndPoint Address = null;
|
|
protected bool IsDisposed;
|
|
internal ServerSocket(SocketType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case SocketType.Tcp: socket = new Socket(AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, ProtocolType.Tcp); BufferSize = TcpBufferSize; break;
|
|
case SocketType.Udp: socket = new Socket(AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, ProtocolType.Udp); BufferSize = UdpBufferSize; break;
|
|
default: throw new ArgumentException("An invalid SocketType was specified.");
|
|
}
|
|
socket.SendTimeout = 3000;
|
|
socket.ReceiveTimeout = 3000;
|
|
|
|
IsDisposed = false;
|
|
}
|
|
|
|
internal void Connect(IPEndPoint address)
|
|
{
|
|
Address = address;
|
|
socket.Connect(Address);
|
|
}
|
|
|
|
internal int SendData(byte[] data)
|
|
{
|
|
return socket.Send(data);
|
|
}
|
|
|
|
internal byte[] ReceiveData()
|
|
{
|
|
byte[] recvData = new byte[BufferSize];
|
|
int recv = 0;
|
|
recv = socket.Receive(recvData);
|
|
return recvData.Take(recv).ToArray();
|
|
}
|
|
|
|
public virtual void Dispose()
|
|
{
|
|
if (IsDisposed)
|
|
return;
|
|
if (socket != null)
|
|
socket.Close();
|
|
IsDisposed = true;
|
|
}
|
|
}
|
|
}
|