Program.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Threading.Tasks;
  5. using System.Diagnostics;
  6. namespace MultiDup
  7. {
  8. internal class Program
  9. {
  10. static Socket SocketWatch = null; // 创建一个和客户端通信的套接字
  11. const int port = 6004; // 端口号(用来监听的)
  12. static void Main(string[] args)
  13. {
  14. selfTest();
  15. IPAddress ip = IPAddress.Any;
  16. IPEndPoint ipe = new IPEndPoint(ip, port); //将IP地址和端口号绑定到网络节点point上
  17. //定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
  18. SocketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  19. SocketWatch.Bind(ipe); // 监听绑定的网络节点
  20. SocketWatch.Listen(20); // 将套接字的监听队列长度限制为20
  21. Console.WriteLine("开启监听......");
  22. Console.WriteLine("ctrl + c 退出程序......");
  23. Task.Run(WatchConnecting).Wait(); // 开启监听线程
  24. SocketWatch.Close(); // 结束监听socket
  25. }
  26. static void selfTest()
  27. {
  28. var rdb = Redis.Ins.GetDatabase(0);
  29. Debug.Assert(rdb.StringSet("test", "wanggang" + DateTime.Now.ToString("yyyyMMddHHmmss")), "Redis读写失败!");
  30. }
  31. /// <summary>
  32. /// 监听客户端发来的请求
  33. /// </summary>
  34. async static Task WatchConnecting()
  35. {
  36. while (true) // 持续不断监听客户端发来的请求
  37. {
  38. Socket connection;
  39. try
  40. {
  41. connection = await SocketWatch.AcceptAsync();
  42. }
  43. catch (Exception ex)
  44. {
  45. Console.WriteLine(ex.Message); // 提示套接字监听异常
  46. break;
  47. }
  48. Lobby.Instance.OnNewPeerConnected(new Peer(connection)); // 有新客户端连入
  49. }
  50. }
  51. }
  52. }