socket 异步
异步就不用等待都是以Begin开始表示开启异步调用,以End开始表示结束异步调用线程,比如指定接收数据后就会继续执行一下步代码,等到有数据了再跳出当前执行的代码转去执行异步调用。
同步的话通常要配合多线程(否则在阻塞的时候当前线程会停止,如果当前线程是UI线程就表现出好像界面停止的样子)。
服务器
/// 服务器 网络管理类
/// 管理网络 所有连接你服务器的网络用户)
/// 1 统计连接了服务器的客户端 等待客户端连接的方法
/// 2 收取客户端发来的消息
/// 3 发送消息给客户端
/// </summary>
internal class NetManager : Singleton<NetManager>
{
Socket socket;
public List<Client> clients = new List<Client>();
public void Init()
{
//地址族 inter net 数据流:一套用于传输数据的类型 协议
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 继承关系 ip地址访问权限 端口
socket.Bind(new IPEndPoint(IPAddress.Any, 8888));
socket.Listen(10);//最大连接数
//异步等待连接
socket.BeginAccept(AsyOnAccept, null);
}
private void AsyOnAccept(IAsyncResult ar)
{
try //try 报错 避免服务器宕机 保持原有功能的实现
{
Socket soc = socket.EndAccept(ar);
IPEndPoint ip = soc.RemoteEndPoint as IPEndPoint;
Client client = new Client();
client.socket = soc;
client.name = ip.Port.ToString();
clients.Add(client);