public async void Connect(string host, int port) { try { var endpoint = IPAddress.Parse(host); mSocket = new Socket(endpoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); mSocket.Connect(endpoint, port); mSocket.BeginConnect(endpoint, port, ConnectCallback, mSocket); RemoteAddress = (IPEndPoint)mSocket.RemoteEndPoint; LocalAddress = (IPEndPoint)mSocket.LocalEndPoint; mKCP = new KCP((uint)(new Random().Next(1, Int32.MaxValue)), rawSend); // normal: 0, 40, 2, 1 // fast: 0, 30, 2, 1 // fast2: 1, 20, 2, 1 // fast3: 1, 10, 2, 1 mKCP.NoDelay(1, 20, 2, 1); mKCP.SetStreamMode(true); mRecvBuffer.Clear(); _tokenSourceReceiver = new CancellationTokenSource(); await Receive(); } catch (Exception ex) { await CloseAsync(); OnError(ex.ToString()); } }
public async void StartClient(string host, int port) { Uri gameServerUri = new Uri(host); IPHostEntry hostEntry = Dns.GetHostEntry(gameServerUri.Host); if (hostEntry.AddressList.Length == 0) { throw new Exception("Unable to resolve host: " + gameServerUri.Host); } var endpoint = hostEntry.AddressList[0]; try { this.listener = new System.Net.Sockets.Socket(endpoint.AddressFamily, SocketType.Dgram, ProtocolType.Udp); this.listener.BeginConnect(endpoint, port, this.OnConnectCallback, this.listener); //this.connected.WaitOne(); RemoteAddress = (IPEndPoint)this.listener.RemoteEndPoint; LocalAddress = (IPEndPoint)this.listener.LocalEndPoint; mKCP = new KCP((uint)(new Random().Next(1, Int32.MaxValue)), Send); // normal: 0, 40, 2, 1 // fast: 0, 30, 2, 1 // fast2: 1, 20, 2, 1 // fast3: 1, 10, 2, 1 mKCP.NoDelay(1, 10, 2, 1); mKCP.WndSize(128, 128); mKCP.SetStreamMode(true); mRecvBuffer.Clear(); _tokenSourceReceiver = new CancellationTokenSource(); await Receive(); var connectedHandler = this.Connected; if (connectedHandler != null) { connectedHandler(this); } } catch (Exception ex)//SocketException { await CloseAsync(); OnError(ex.ToString()); } }