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. using (var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
  30. {
  31. try
  32. {
  33. await client.ConnectAsync(endPoint);
  34. }
  35. catch (Exception ee)
  36. {
  37. Debug.WriteLine(ee.Message);
  38. }
  39. RoomManager.Instance.ServerPeer = new ServerPeer(client); // 给管理器的服务器间socket赋值
  40. }
  41. }
  42. static void selfTest()
  43. {
  44. var rdb = Redis.Ins.GetDatabase(0);
  45. Debug.Assert(rdb.StringSet("test", "wanggang" + DateTime.Now.ToString("yyyyMMddHHmmss")), "Redis读写失败!");
  46. }
  47. /// <summary>
  48. /// 监听客户端发来的请求
  49. /// </summary>
  50. async static Task WatchConnecting()
  51. {
  52. IPAddress ip = IPAddress.Any;
  53. IPEndPoint ipe = new IPEndPoint(ip, port); //将IP地址和端口号绑定到网络节点point上
  54. //定义一个套接字用于监听客户端发来的消息,包含三个参数(IP4寻址协议,流式连接,Tcp协议)
  55. Socket SocketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  56. SocketWatch.Bind(ipe); // 监听绑定的网络节点
  57. SocketWatch.Listen(20); // 将套接字的监听队列长度限制为20
  58. while (true) // 持续不断监听客户端发来的请求
  59. {
  60. Socket connection;
  61. try
  62. {
  63. connection = await SocketWatch.AcceptAsync();
  64. }
  65. catch (Exception ex)
  66. {
  67. Console.WriteLine(ex.Message); // 提示套接字监听异常
  68. break;
  69. }
  70. RoomManager.Instance.OnNewPeerConnected(new Peer(connection)); // 有新客户端连入
  71. }
  72. SocketWatch.Close(); // 结束监听socket
  73. }
  74. }
  75. }