/// <summary> /// 连接到服务器 /// </summary> /// <param name="host"></param> /// <param name="port"></param> public bool Connect(string host, int port) { if (MainClient != null) { throw new ObjectDisposedException("MainClient", "连接已经初始化,无法再连接,请重新 new ZYNetClient"); } MainClient = new SocketClient(); MainClient.BinaryInput += Client_BinaryInput; MainClient.MessageInput += Client_MessageInput; if (MainClient.Connect(host, port)) { MainClient.StartRead(); LLOG("成功连接服务器", ActionType.ServerConn); RegHost = host; string localip = ((IPEndPoint)(MainClient.Sock.LocalEndPoint)).Address.ToString(); //获取本地局域网IP地址 RegSession session = new RegSession() { LocalHost = localip, Group = Group }; SendToServer(BufferFormat.FormatFCA(session)); return(true); } else { return(false); } }
void RunQueueList() { try { if (UserMaskList.Count > 0) //如果列队数量大于0 { Re: long userkey; if (UserMaskList.TryDequeue(out userkey)) //挤出一个用户ID { if (userkey == this.Id) { goto Re; } SocketClient client = new SocketClient(); //建立一个 SOCKET客户端 int Re = 10; Pt: IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, BindPort++); //绑定当前端口 if (BindPort >= 60000) { BindPort = 1000; } try { client.Sock.Bind(endpoint); //如果无法绑定此端口 那么换个端口 } catch { Re--; if (Re > 0) { goto Pt; } else { return; } } if (client.Connect(RegHost, RegPort)) //连接注册服务器端口 { client.StartRead(); client.BinaryInput += (data) => { if (data[0] == 1) { BufferFormat tmp2 = new BufferFormat(-1002); tmp2.AddItem(userkey); MainClient.Send(tmp2.Finish()); client.Close();//关闭客户端 } }; BufferFormat tmp = new BufferFormat(100); tmp.AddItem(Id); tmp.AddItem(BindPort); client.Send(tmp.Finish()); } else//如果无法绑定此端口 那么换个端口 { if (client.socketError == SocketError.AddressAlreadyInUse) { client = new SocketClient(); Re--; if (Re > 0) { client = new SocketClient(); goto Pt; } else { return; } } } } } } catch (Exception e) { LLOG(e.ToString(), ActionType.Error); } }
void RegConnectTo(string host, int port, long id) { SocketClient client = new SocketClient(); int ReCount = 10; Tp: IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, BindPort++); //绑定端口 if (BindPort >= 60000) { BindPort = 1000; } try { client.Sock.Bind(endpoint); //如果无法绑定那么重新选个端口 } catch { ReCount--; if (ReCount > 0) { goto Tp; } else { return; } } if (client.Connect(this.RegHost, this.RegPort)) //连接到注册端口 { client.StartRead(); client.BinaryInput += (data) => { if (data[0] == 1) { BufferFormat tmp2 = new BufferFormat(-1003); tmp2.AddItem(id); MainClient.Send(tmp2.Finish()); client.Close(); RunConnToMe(host, port, id); } }; BufferFormat tmpX = new BufferFormat(100); tmpX.AddItem(this.Id); tmpX.AddItem(BindPort); client.Send(tmpX.Finish()); } else //如果无法绑定此端口 那么换个端口 { if (client.socketError == SocketError.AddressAlreadyInUse) { ReCount--; if (ReCount > 0) { client = new SocketClient(); goto Tp; } else { return; } } } }