Program.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.Threading.Tasks;
  5. using System.Diagnostics;
  6. using System.Collections.Generic;
  7. using MultiDup;
  8. namespace BattleRoom
  9. {
  10. internal class Program
  11. {
  12. const int port = 6006; // 端口号(用来监听客户端连接的)
  13. static void Main(string[] args)
  14. {
  15. selfTest();
  16. Console.WriteLine("开启监听......");
  17. Console.WriteLine("ctrl + c 退出程序......");
  18. InitServerPeer();
  19. Task.Run(WatchConnecting).Wait(); // 开启监听线程
  20. }
  21. /// <summary>
  22. /// 初始化服务器间socket
  23. /// </summary>
  24. async static void InitServerPeer()
  25. {
  26. var port = 6005; // 连接本机的大厅服务端口
  27. var endPoint = new IPEndPoint(IPAddress.Loopback, port);
  28. //var endPoint = new IPEndPoint(IPAddress.Parse("192.168.10.17"), port);
  29. var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  30. try
  31. {
  32. await client.ConnectAsync(endPoint);
  33. }
  34. catch (Exception ee)
  35. {
  36. Debug.WriteLine(ee.Message);
  37. }
  38. RoomManager.Instance.ServerPeer = new ServerPeer(client); // 给管理器的服务器间socket赋值
  39. RoomManager.Instance.ServerPeer.OnSocketDisconnected += () => { InitServerPeer(); };
  40. }
  41. static void selfTest()
  42. {
  43. var rdb = Redis.Ins.GetDatabase(0);
  44. Debug.Assert(rdb.StringSet("test", "wanggang" + DateTime.Now.ToString("yyyyMMddHHmmss")), "Redis读写失败!");
  45. }
  46. /// <summary>
  47. /// 监听客户端发来的请求
  48. /// </summary>
  49. async static Task WatchConnecting()
  50. {
  51. IPAddress ip = IPAddress.Any;
  52. IPEndPoint ipe = new IPEndPoint(ip, port); //将IP地址和端口号绑定到网络节点point上
  53. //定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
  54. Socket SocketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  55. SocketWatch.Bind(ipe); // 监听绑定的网络节点
  56. SocketWatch.Listen(20); // 将套接字的监听队列长度限制为20
  57. while (true) // 持续不断监听客户端发来的请求
  58. {
  59. Socket connection;
  60. try
  61. {
  62. connection = await SocketWatch.AcceptAsync();
  63. }
  64. catch (Exception ex)
  65. {
  66. Console.WriteLine(ex.Message); // 提示套接字监听异常
  67. break;
  68. }
  69. RoomManager.Instance.OnNewPeerConnected(new Peer(connection)); // 有新客户端连入
  70. }
  71. SocketWatch.Close(); // 结束监听socket
  72. }
  73. }
  74. }