巨石化纤
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.

90 lines
2.3 KiB

using System;
using System.Net;
using System.Net.Sockets;
namespace SSWMS.Server
{
class ServerSocket
{
private readonly int _port;
private Socket _socket;
public event ConnectedEventHandler Connected;
public event DisConnectedEventHandler DisConnected;
public event MessageReceivedEventHandler MessageReceived;
public ServerSocket(int port)
{
_port = port;
}
public void BeginAccept()
{
try
{
if (_socket == null)
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
_socket.Bind(new IPEndPoint(IPAddress.Any, _port));
_socket.Listen(10);
_socket.BeginAccept(new AsyncCallback(OnAccept), null);
}
catch
{
}
}
private void OnAccept(IAsyncResult ar)
{
try
{
Socket socket = _socket.EndAccept(ar);
BaseSocket baseSocket = new BaseSocket(socket);
if (Connected != null)
{
Connected(baseSocket);
}
baseSocket.DisConnected += OnDisConnected;
baseSocket.MessageReceived += OnMessageReceived;
baseSocket.BeginReceive();
_socket.BeginAccept(new AsyncCallback(OnAccept), null);
}
catch
{
}
}
private void OnDisConnected(BaseSocket socket)
{
if (DisConnected != null)
{
DisConnected(socket);
}
}
private void OnMessageReceived(BaseSocket socket, byte[] message)
{
if (MessageReceived != null)
{
MessageReceived(socket, message);
}
}
public void Dispose()
{
try
{
if (_socket != null)
{
_socket.Dispose();
_socket = null;
}
}
catch
{
_socket = null;
}
}
}
}