```
using System;
using System.Net;
using System.Net.Socket;
using System.Text;//处理信息
///
///套接字管理器,用来创建服务器,链接服务器等相关的操作
///
public class SocketManager
{
static SocketManager _instance;//设置单例
public static SocketManager Instance
{
get
{
if(_instance==null)
{
_instance=new SocketManager();
}
return _instance;
}
}
//传输消息的委托
public delegate void MsgCallBack(string msg);
public MsgCallBack serverCallBack;
/*
服务器的流程:
1.创建服务器
2.等待连接
3.发送消息
4.接收消息
Socket里面所用到的方法:
1.创建服务器的套接字(Socket)
2.绑定服务器的IP地址和端口
3.监听客户端的连接
4.接收客户端的连接
5.发送/接收的消息
*/
//从服务器传输的字节流
public byte[]buffer;
public Socket serverSocket;
//创建服务器
public void ServerInit(MsgCallBack callBack)
{
//服务器的回调
serverCallBack=callBack;
//实例化缓存数组
buffer=new byte[1024];
//初始化服务器的套接字
//寻址方式:表示连接的是IPv4,传输方式:流,协议方式:Tcp
serverSocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//创建一个IP
//IPAddress.Any:指当前机器的IP地址
IPEndPoint ip=new IpEndPoint(IPAddress.Any,32456);
serverSocket.Bind(ip);//服务器套接字绑定IP和端口号
//开始监听
serverSocket.Listen(10);
//开启接收联机服务器的请求
serverSocket.BeginAccept(ServerAccept,serverSocket);
//服务器创建成功之后回调
serverCallBack("服务器创建成功");
}
void ServerAccept(IAsyncResult ar)
{
//接收客户端的信息,状态的动态连接
serverSocket=ar.AsyncState as Socket;
//结束接收,把结果给ar
Socket workingSocket=serverSocket.EndAccept(ar);
//开始接收消息
workingSocket.BeginRecive()
{
buffer,//接收消息的数组
0,//从第几位开始
buffer.Length,//接收数组的长度
SocketFlags.None,//不需要特殊的服务
ServerRecive,//接收消息的回调方法
workingSocket//当前套接字的状态
};
//尾递归:继续接收其他客户端的连接请求
workingSocket.BeginAccept(ServerAccept,workingSocket);
}
//接收服务器的消息
void ServerRecive(IAsyncResult ar)
{
//接收结果
Socket workingSocket=ar.AsyncState as Socket;
//接收到的消息的长度
int count=workingSocket.EndRecive(ar);
//将字节流转换为文本内容
string msg=UTF8Encoding.UTF8.GetString(buffer);
//将文本显示出来
serverCallBack("接收到了"+count+"个字节长度的消息");
serverCallBack(msg);
buffer=new byte[1024];
//尾递归
workingSocket.BeginRecive
{
buffer,
0,
buffer.Length,
SocketFlags.None,
ServerRecive,
workingSocket
}
}
}
```