一、初始化socket并开启监听
/// <summary>
/// 开启服务器端
/// </summary>
/// <param name="_port"></param>
public void MStartServerMode(int _port = 6000)
{
//舒适化一些事件
MInitServerMode(1);
if (MReceive)
{
MPort = _port;
//实例化socket
MSSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定服务器ip和端口,直接就IPAddress.Any就好
MSSocket.Bind(new IPEndPoint(IPAddress.Any, MPort));
//设置监听队列
MSSocket.Listen(100);
//开始异步监听,MAcceptCallBackMode是回调函数
MSSocket.BeginAccept(new AsyncCallback(MAcceptCallBackMode), MSSocket);
//开启一个线程发送心跳
Thread mIsConnectThread = new Thread(MSendHeartBeatMode);
mIsConnectThread.IsBackground = true;
mIsConnectThread.Start();
//开启一个线程监听服务器连接情况
Thread mConnectStatusThread = new Thread(MDetectionConnectStatusMode);
mConnectStatusThread.IsBackground = true;
mConnectStatusThread.Start();
}
}
二、监听客户端连接
/// <summary>
/// 开始监听
/// </summary>
private void MAcceptCallBackMode(IAsyncResult ar)
{
//退出循环用
if (MReceive)
{
//有客户端接入
Socket mClientSocket = MSSocket.EndAccept(ar);
//存储已连接的客户端
MClientSocketList.Add(mClientSocket);
MHeartTime mHeartTime = new MHeartTime();
//存储服务器向此socket发送和接收心跳的时间的集合
MDetectionHeartDic.Add(mClientSocket, mHeartTime);
//使用事件通知前端有客户端连接
if (MAddClientListEvent != null)
{
MAddClientListEvent(mClientSocket);
}
//开始接收消息&#