private async Task ProcessConsumeUdpRequestAsync(int consumerPort, UdpReceiveResult receiveResult) { var nspAppGroup = ServerContext.UDPPortAppMap[consumerPort]; if (nspAppGroup.ProtocolInGroup == Protocol.UDP) { var s2pClient = await ConnectionManager.GetClientForUdp(consumerPort, null); var tunnelStream = s2pClient.GetStream(); // method packegelength buffer // udp 2 packagelength tunnelStream.Write(new byte[] { (byte)ControlMethod.UDPTransfer }, 0, 1); tunnelStream.Write(StringUtil.IntTo2Bytes(receiveResult.Buffer.Length), 0, 2); await tunnelStream.WriteAsync(receiveResult.Buffer); Logger.Debug($"UDP数据包已发送{receiveResult.Buffer.Length}字节"); } }
///接收到消费端的udp请求之后,开始侦测服务端->客户端的请求 private async Task ProcessConsumeUdpRequestAsync(UdpClient consumerUdpClient, int consumerPort, UdpReceiveResult receiveResult, CancellationToken ct) { var nspAppGroup = ServerContext.UDPPortAppMap[consumerPort]; if (nspAppGroup.ProtocolInGroup == Protocol.UDP) { try { var s2pClient = ConnectionManager.GetClientForUdp(consumerPort, null); var tunnelStream = s2pClient.GetStream(); var nspApp = nspAppGroup.ActivateApp; // method ip(D) port buffer(D) // udp X 2 X tunnelStream.Write(new byte[] { (byte)ControlMethod.UDPTransfer }, 0, 1); //tunnelStream.Write(StringUtil.IntTo2Bytes(nspApp.AppId)); //tunnelStream.Write(StringUtil.IntTo2Bytes(receiveResult.Buffer.Length), 0, 2); await tunnelStream.WriteDLengthBytes(receiveResult.RemoteEndPoint.Address.ToString()); tunnelStream.Write(StringUtil.IntTo2Bytes(receiveResult.RemoteEndPoint.Port)); await tunnelStream.WriteDLengthBytes(receiveResult.Buffer); Logger.Debug($"UDP数据包已发送{receiveResult.Buffer.Length}字节,remote ep:{receiveResult.RemoteEndPoint.ToString()}"); lock (receiveUdpLocker) { if (nspAppGroup.UdpTransmissionTask == null)//一个app只产生一个udp隧道(共用隧道) { //传回连接 (异步) nspAppGroup.UdpTransmissionTask = OpenUdpTransmission(receiveResult.RemoteEndPoint, tunnelStream, nspAppGroup, ct); } //int x = 1; } } catch (Exception ex) { Logger.Debug("UDP传输错误:" + ex.ToString()); } } }