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