Esempio n. 1
0
        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}字节");
            }
        }
Esempio n. 2
0
        ///接收到消费端的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());
                }
            }
        }