巨石化纤
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
3.7 KiB

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace SSWMS.Server
{
public delegate void ConnectedEventHandler(BaseSocket socket);
public delegate void DisConnectedEventHandler(BaseSocket socket);
public delegate void MessageReceivedEventHandler(BaseSocket socket, byte[] message);
public class BaseSocket
{
private readonly byte[] _buffer = new byte[1024];
protected Socket _socket;
public string RemoteIP;
public int RemotePort;
public bool Connected
{
get
{
return _socket != null && _socket.Connected;
}
}
public event DisConnectedEventHandler DisConnected;
public event MessageReceivedEventHandler MessageReceived;
public BaseSocket(Socket socket)
{
_socket = socket;
if (_socket != null)
{
RemoteIP = (_socket.RemoteEndPoint as IPEndPoint).Address.ToString();
RemotePort = (_socket.RemoteEndPoint as IPEndPoint).Port;
}
}
public void BeginReceive()
{
try
{
if (_socket != null)
{
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
}
}
catch
{
}
}
public void OnReceive(IAsyncResult iar)
{
try
{
int iReceived = _socket.EndReceive(iar);
if (iReceived > 0)
{
byte[] message = new byte[iReceived];
Array.Copy(_buffer, message, iReceived);
if (MessageReceived != null)
{
MessageReceived.BeginInvoke(this, message, null, null);
}
_socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(OnReceive), null);
}
else
{
if (DisConnected != null)
{
DisConnected(this);
}
}
}
catch
{
if (DisConnected != null)
{
DisConnected(this);
}
}
}
public void Dispose()
{
try
{
if (_socket != null)
{
_socket.Dispose();
_socket = null;
}
}
catch
{
_socket = null;
}
}
public void Send(byte[] message)
{
try
{
if (_socket != null)
{
_socket.Send(message);
}
}
catch
{
}
}
public void BeginSend(byte[] message)
{
try
{
if (_socket != null)
{
_socket.BeginSend(message, 0, message.Length, SocketFlags.None, null, null);
}
}
catch
{
}
}
public void Send(string message)
{
try
{
Send(Encoding.ASCII.GetBytes(message));
}
catch
{
}
}
public void BeginSend(string message)
{
try
{
BeginSend(Encoding.ASCII.GetBytes(message));
}
catch
{
}
}
}
}