Program.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. const int serverport = 6005; // 用于监听服务端连接的端口号
  11. public static ServerPeer serverPeer = null; // 战斗server的连接
  12. const int port = 6004; // 端口号(用来监听的)
  13. static void Main(string[] args)
  14. {
  15. selfTest();
  16. Console.WriteLine("开启监听......");
  17. Console.WriteLine("ctrl + c 退出程序......");
  18. Task[] tasks = new Task[2];
  19. tasks[0] = Task.Run(WatchConnecting);
  20. tasks[1] = Task.Run(WatchServerPeerConnecting);
  21. Task.WaitAll(tasks); // 开启监听线程
  22. }
  23. static void selfTest()
  24. {
  25. var rdb = Redis.Ins.GetDatabase(0);
  26. Debug.Assert(rdb.StringSet("test", "wanggang" + DateTime.Now.ToString("yyyyMMddHHmmss")), "Redis读写失败!");
  27. }
  28. /// <summary>
  29. /// 监听客户端发来的请求
  30. /// </summary>
  31. async static Task WatchConnecting()
  32. {
  33. IPAddress ip = IPAddress.Any;
  34. IPEndPoint ipe = new IPEndPoint(ip, port); //将IP地址和端口号绑定到网络节点point上
  35. //定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
  36. Socket SocketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  37. SocketWatch.Bind(ipe); // 监听绑定的网络节点
  38. SocketWatch.Listen(20); // 将套接字的监听队列长度限制为20
  39. while (true) // 持续不断监听客户端发来的请求
  40. {
  41. Socket connection;
  42. try
  43. {
  44. connection = await SocketWatch.AcceptAsync();
  45. }
  46. catch (Exception ex)
  47. {
  48. Console.WriteLine(ex.Message); // 提示套接字监听异常
  49. break;
  50. }
  51. Lobby.Instance.OnNewPeerConnected(new Peer(connection)); // 有新客户端连入
  52. }
  53. SocketWatch.Close(); // 结束监听socket
  54. }
  55. /// <summary>
  56. /// 监听服务端发来的请求
  57. /// </summary>
  58. async static Task WatchServerPeerConnecting()
  59. {
  60. IPAddress ip = IPAddress.Any;
  61. IPEndPoint ipe = new IPEndPoint(ip, serverport); //将IP地址和端口号绑定到网络节点point上
  62. //定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
  63. Socket SocketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  64. SocketWatch.Bind(ipe); // 监听绑定的网络节点
  65. SocketWatch.Listen(20); // 将套接字的监听队列长度限制为20
  66. while (true) // 持续不断监听客户端发来的请求
  67. {
  68. Socket connection;
  69. try
  70. {
  71. connection = await SocketWatch.AcceptAsync();
  72. }
  73. catch (Exception ex)
  74. {
  75. Console.WriteLine(ex.Message); // 提示套接字监听异常
  76. break;
  77. }
  78. Console.WriteLine("server peer 连接上来了.");
  79. serverPeer = new ServerPeer(connection); // 建立与服务端的连接
  80. }
  81. SocketWatch.Close(); // 结束监听socket
  82. }
  83. }
  84. }