コード例 #1
0
        // UDP Consumer
        static async Task <BufferBlockWrapperUDP> ConsumeAsyncUDP(ISourceBlock <BufferBlockWrapperUDP> source)
        {
            // Read from the source buffer
            while (await source.OutputAvailableAsync())
            {
                BufferBlockWrapperUDP wrapper = await source.ReceiveAsync();

                UDPMessage msg   = wrapper.message;
                int        netID = wrapper.netID;

                ConsumeMessageUDP(msg, netID);
            }

            return(null);
        }
コード例 #2
0
 void udpMain_ReceiveMessage(object sender, UDPMessage e)
 {
     dgvMessages.Rows.Add(
         new object[]
     {
         e.MessageType.ToString(),
         e.Title,
         e.Message,
         e.FromIP,
         e.ToIP,
         e.FromName,
         e.DateSended.ToString(),
         e.Port.ToString()
     }
         );
 }
コード例 #3
0
        private void cmdSend_Click(object sender, EventArgs e)
        {
            UDPMessage udpMens = new UDPMessage();

            //udpMens.MessageType = UDPMessage.UDPMessageType.udpm_CrossCheck;
            udpMens.Title   = txtTitle.Text;
            udpMens.Port    = int.Parse(txtPort.Text);
            udpMens.Message = txtMessage.Text;
            udpMens.ToIP    = txtTarget.Text;
            udpMain.Send(udpMens);
            udpMens         = null;
            txtLog.Text    += "Enviado:" + txtMessage.Text + Environment.NewLine;
            txtMessage.Text = "";
            txtMessage.Focus();
            //udpMain.Dispose();
            //udpMain = null;
        }
    /// <summary>
    ///		Is called on NetworkMessage arrival,
    ///		and calls the method accompanied to it
    ///		on either the secondary or main thread.
    /// </summary>
    public void OnMessageReceived(UDPMessage message)
    {
        // Calls the function corresponding with the message's type.
        NetworkMessage networkMessage = (NetworkMessage)message;
        string         methodName     = networkMessage.Type.ToString();
        MethodInfo     method         = GetType().GetMethod(methodName);

        Action methodCall = delegate { method.Invoke(this, new object[] { networkMessage }); };

        if (method.GetCustomAttributes(typeof(ExecuteOnMainThread), true).Any())
        {
            actionQueue.Enqueue(methodCall);
        }
        else
        {
            methodCall.Invoke();
        }
    }
コード例 #5
0
        /// <summary>
        /// Sendet einen Broadcast ins Netzwerk
        /// Wenn einer darauf antwortet, dann mit seiner IPAdresse
        /// </summary>
        /// <returns></returns>
        private void BroadCastSend(UDPMessage udpMessage, UdpClient udpClient, IPEndPoint remoteEndPoint)
        {
            IsLocalServer = true;
            try
            {
                //Broadcast wird versendet
                udpClient.Send(udpMessage.DataInBytes, udpMessage.Data.Length, udpMessage.TargetAddress, udpMessage.Port);
                try
                {
                    //Daten werden aus dem udpStream gelesen
                    udpMessage.DataInBytes = udpClient.Receive(ref remoteEndPoint);
                    String messageFromServer = udpMessage.ReadBytes(udpMessage.DataInBytes);

                    if (null != messageFromServer)
                    {
                        ConnectionString = messageFromServer;
                        udpClient.Close();
                    }
                    else //Keine Antwort zurück bekommen
                    {
                        // Server im Internet wird verwendet
                        udpClient.Close();
                        udpClient.Client.Disconnect(true);
                        // Wenn man die Verbindung über das Internet laufen lassen möchte
                        //ConnectionString = Properties.Settings.Default.ConnectionString;
                        //IsLocalServer = false;
                    }
                }
                catch (Exception timeout)
                {
                    udpClient.Close();
                    // Wenn man die Verbindung über das Internet laufen lassen möchte
                    //ConnectionString = Properties.Settings.Default.ConnectionString;
                    IsLocalServer = false;
                }
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message); //TODO:
            }
        }
コード例 #6
0
        private void OnLoad_Connect(object sender, EventArgs e)
        {
            this.button_Exit.Enabled = false;
            serverIP         = IPAddress.Any;
            backgroundClient = new UDPMessage();
            listenBroadcast  = new Thread(
                () =>
            {
                backgroundClient.OnListenBroadcast(
                    threadID: 9999,
                    port: Port.DEFAULT_BROADCAST_PORT,
                    ver: VerMessage.PUBLIC_VERIFICATION,
                    serverIP: out serverIP
                    );
            }
                );
            listenBroadcast.Start();
            Thread watcher = new Thread(WatchServerIP);

            watcher.Start();
        }
コード例 #7
0
        private void cmdSend_Click(object sender, EventArgs e)
        {
            UDPMessage udpMes = new UDPMessage();

            udpMes.Port    = int.Parse(txtPort.Text);
            udpMes.Message = txtMessage.Text;
            udpMes.ToIP    = "192.168.14.61";
            udpMain.Send(udpMes);
            udpMes = null;

            //int intIndex;

            //for ( intIndex = 0 ; intIndex < trvPC.Nodes [ 0 ].Nodes.Count ; intIndex++ )
            //{
            //    if ( trvPC.Nodes [ 0 ].Nodes [ intIndex ].Checked )
            //    {
            //        udpMes.ToIP = trvPC.Nodes [ 0 ].Nodes [ intIndex ].Tag.ToString();
            //        udpMain.Send( udpMes );
            //    }
            //}
        }
コード例 #8
0
    //Method called when a command is received from a controller
    private void HandleMessage(string udpMessage, string source)
    {
        //Here we check if controller sending the command is known or not. If not, we call the NewControllerDelegate
        if (!ConnectedControllers.ContainsKey(source))
        {
            if (ncDelegate != null)
            {
                ncDelegate(source);
            }
        }
        //Parse the message from JSON
        UDPMessage message = JsonUtility.FromJson <UDPMessage>(udpMessage);

        try
        {
            ConnectedControllers[source].actions[message.type](message.x, message.y, message.z);
        } catch (Exception e)
        {
            Debug.Log(e);
        }
    }
コード例 #9
0
        public static void UDPReceiveCallback(IAsyncResult ar)
        {
            UdpClient  u = (UdpClient)((UDPState)(ar.AsyncState)).u;
            IPEndPoint e = (IPEndPoint)((UDPState)(ar.AsyncState)).e;

            Byte[] receiveBytes = u.EndReceive(ar, ref e);

            //Console.WriteLine("Bytes received: {0}", receiveBytes.Length);

            messageReceived = true;

            UDPState s = (UDPState)ar.AsyncState;

            UDPMessage msg = UDPMessage.Parser.ParseFrom(receiveBytes);

            BufferBlockWrapperUDP wrap = new BufferBlockWrapperUDP();

            wrap.message = msg;
            wrap.netID   = clients.Find(c => ((IPEndPoint)c.workSocket.RemoteEndPoint).Address.Equals(e.Address)).netID;

            asyncQueueUDP.SendAsync(wrap);

            u.BeginReceive(new AsyncCallback(UDPReceiveCallback), s);
        }
コード例 #10
0
ファイル: UDPServices.cs プロジェクト: adesproject/ADES
            public void StartReceive()
            {
                try
                {
                    //Create a UDP socket.
                    soUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                    soUdp.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
                    soUdp.ReceiveTimeout = 2000;
                    IPEndPoint localIpEndPoint = new IPEndPoint(IPAddress.Parse(udpAddress.HostIP), (int)udpAddress.Sp);
                    soUdp.Bind(localIpEndPoint);
                    byte[] received = new Byte[UDP_MAX_PACKET_SIZE];
                    byte[] msgBuffer = null;
                    Dictionary<int, byte[]> messageDict = new Dictionary<int, byte[]>(100);

                    while (isRunning)
                    {
                        EndPoint remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0));

                        int size = 0;

                        try
                        {
                            if (soUdp!=null && soUdp.IsBound)
                                size = soUdp.ReceiveFrom(received, ref remoteEP);
                        }
                        catch (SocketException seInner)
                        {
                            if (seInner.ErrorCode == (int)SocketError.TimedOut)
                                Console.WriteLine("Socket timedout " + udpAddress);
                            else
                                throw seInner;
                        }
                        if (size > 0)
                        {
                            byte[] data = new byte[size];
                            Buffer.BlockCopy(received, 0, data, 0, size);
                            //Console.WriteLine("received from "+ servicePort+":" + received);
                            UDPMessage udpMsg = new UDPMessage(data);
                            if (!messageDict.ContainsKey(udpMsg.MessageID))
                            { // init buffer
                                msgBuffer = new byte[udpMsg.MessageSize];
                                messageDict.Add(udpMsg.MessageID, msgBuffer);
                            }
                            else
                            {
                                messageDict.TryGetValue(udpMsg.MessageID, out msgBuffer);
                            }
                            Buffer.BlockCopy(udpMsg.Data, 0, msgBuffer, udpMsg.MessageOffset, udpMsg.Data.Length);
                            if (udpMsg.MessageOffset + udpMsg.Data.Length >= udpMsg.MessageSize - 1)
                            {
                                owner.receiveMsg(msgBuffer);
                                messageDict.Remove(udpMsg.MessageID);
                                msgBuffer = null;
                            }
                            //String dataReceived = System.Text.Encoding.ASCII.GetString(received);
                            //Byte[] returningByte = System.Text.Encoding.ASCII.GetBytes(returningString.ToCharArray());
                            //soUdp.SendTo(returningByte, remoteEP);
                        }
                    }
                }
                catch (SocketException se)
                {
                    Console.WriteLine("A Socket Exception has occurred!" + se.ToString());
                }
            }
コード例 #11
0
 public void OnMessageReceived(UDPMessage message)
 {
     LogMessage((T)message);
 }
コード例 #12
0
        private void Form_Main_Load(object sender, EventArgs e)
        {
            __tmp__     = new NotStatic();
            onlineUsers = new ClientTable();
            // 加载用户列表
            rtUserPath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "uesrs.bin";
            FileInfo fi = new FileInfo(rtUserPath);

            if (fi.Exists)
            {
                LoadUsersData(rtUserPath);
            }
            else
            {
                FileStream fs = fi.Create(); fs.Close();
                users = new UserSet();
                SaveUsersData(rtUserPath);
            }

            // 调整窗口属性
            uid = Registry.ReadKey4Registry("PublishServer", "CurrentUserID");
            int idNumeric = int.Parse(uid);

            uid       = idNumeric.ToString("D6");
            uac       = Registry.ReadKey4Registry("PublishServer", "CurrentUserAccount");
            ucl       = Registry.ReadKey4Registry("PublishServer", "CurrentUserName");
            this.Text = "教材补助经费评估软件 [" + ucl + "]" + " [#" + uid + "]";

            // 开始 UDP 广播
            backgroundServer = new UDPMessage();
            Thread udpThread = new Thread(
                () => {
                backgroundServer.OnBroadcast(
                    threadID: 9999,
                    port: Port.DEFAULT_BROADCAST_PORT,
                    ver: VerMessage.PUBLIC_VERIFICATION
                    );
            }
                );

            udpThread.IsBackground = true;
            udpThread.Start();

            // 初始化用户个人信息
            this.label_AdminTitle.Text += "[#" + uid + "]";
            this.label_AdminName.Text   = ucl;

            // 所有 TCP 监听端口就绪
            tcpServerLogin = new TcpListenerP(new IPEndPoint(IPAddress.Any, Port.TCP_LOGIN_PORT));
            tcpServerLogin.OnThreadTaskRequest += new TcpListenerP.ThreadTaskRequest(OnListenClient);
            tcpServerBookEvau = new TcpListenerP(new IPEndPoint(IPAddress.Any, Port.TCP_BOOK_EVALUATION_PORT));
            tcpServerBookEvau.OnThreadTaskRequest += new TcpListenerP.ThreadTaskRequest(OnListenBookEvau);

            // 所有 TCP 客户端使用前初始化
            // tcpClientUserFile = new TcpClientP();

            // 初始化教材列表
            BookList = new BookDetailList();
            BookEval = new BookEvaluaionList();

            // 初始化列表显示
            ResetListView_Books();
            ResetListView_Users();
        }
コード例 #13
0
        void EvalCommand(UDPMessage e)
        {
            string strStatus   = "-";
            string strFree     = "Liberado";
            string strLocked   = "Reservado";
            string strNotFound = "notfound";

            //PARA PONER ESTADO DE ARCHIVO
            if (e.Title.Trim() == "setrecerved")
            {
                strStatus = strLocked;
            }
            if (e.Title.Trim() == "setaccesible")
            {
                strStatus = strFree;
            }

            if (strStatus == strFree || strStatus == strLocked)
            {
                int IndexResult = ExistItem("FileName", e.Message, dgvDataActivity);

                if (IndexResult == -1)
                {
                    dgvDataActivity.Rows.Add(e.Message, e.FromName + " " + e.FromIP, strStatus, e.DateSended.ToString(), "");
                }
                else
                {
                    dgvDataActivity["Status", IndexResult].Value = strStatus;

                    //Envio de notificación de archivo
                    if (dgvDataActivity["Requests", IndexResult].Value.ToString().Contains(';'))
                    {
                        string[] IpList = dgvDataActivity["Requests", IndexResult].Value.ToString().Split(';');
                        foreach (string IpItem in IpList)
                        {
                            UDPMessage udpMens = new UDPMessage();
                            udpMens.MessageType = UDPMessage.UDPMessageType.udpm_Common;
                            udpMens.Title       = "Archivo Liberado";
                            udpMens.Port        = e.Port;
                            udpMens.Message     = e.Message;
                            udpMens.ToIP        = IpItem;
                            udpMain.Send(udpMens);
                            udpMens = null;
                        }
                    }
                }
            }

            //PETICION DE ESTADO DE ARCHIVO
            if (e.Title.Trim() == "retreivestatusfile")
            {
                //dgvMessages.Rows.Add(new object[] { "Peticion de estado de archivos" ,
                //            "" ,
                //            "" ,
                //            "",
                //            "",
                //            "",
                //            e.DateSended.ToString(),
                //            e.Port.ToString()});

                int IndexResult = ExistItem("FileName", e.Message, dgvDataActivity);

                UDPMessage udpMens = new UDPMessage();
                udpMens.MessageType = UDPMessage.UDPMessageType.udpm_Command;
                udpMens.Title       = "retreivestatusfileresult";
                udpMens.Port        = e.Port;

                if (IndexResult > -1)
                {
                    udpMens.Message = e.Message + ";" + dgvDataActivity["Status", IndexResult].Value.ToString();
                    dgvDataActivity["Requests", IndexResult].Value += e.FromIP + ";";
                }
                else
                {
                    udpMens.Message = e.Message + ";" + strNotFound;
                }

                udpMens.ToIP = e.FromIP;
                udpMain.Send(udpMens);
                udpMens = null;

                dgvMessages.Rows.Add(new object[] { "Peticion de estado de archivos enviada a " + e.FromIP + " " + e.FromName,
                                                    "",
                                                    "",
                                                    "",
                                                    "",
                                                    "",
                                                    e.DateSended.ToString(),
                                                    e.Port.ToString() });
            }
        }
コード例 #14
0
    public bool Send(UDPMessage udpMessage)
    {
        bool      blReturn = true;
        int       pRet;
        UdpClient udpClient          = new UdpClient();
        string    strMessageObjArray = "";

        /**********************/
        udpMessage.FromName = Dns.GetHostName();
        IPAddress[] ipaRank;
        ipaRank = Dns.GetHostAddresses(Dns.GetHostName());

        foreach (IPAddress ip in ipaRank)
        {
            udpMessage.FromIP += ip.ToString() + ";";
        }
        /**********************/


        try
        {
            GLOIP      = IPAddress.Parse(udpMessage.ToIP);
            GLOINTPORT = udpMessage.Port;
            udpClient.Connect(GLOIP, GLOINTPORT);
            //Console.WriteLine("Connected to client");
            /**/
            strMessageObjArray =
                udpMessage.MessageType.ToString() + m_separator[0] +
                udpMessage.Title + m_separator[0] +
                udpMessage.Message + m_separator[0] +
                udpMessage.FromIP + m_separator[0] +
                udpMessage.ToIP + m_separator[0] +
                udpMessage.FromName + m_separator[0] +
                udpMessage.DateSended.ToString() + m_separator[0] +
                udpMessage.Port.ToString() + m_separator[0] +
                udpMessage.ID.ToString() + m_separator[0] +
                udpMessage.IDSource.ToString() + m_separator[0] +
                udpMessage.RequireReceived.ToString() + m_separator[0];
            /**/
            //Console.WriteLine("Message created");
            //bytCommand = Encoding.ASCII.GetBytes( udpMessage.Message );
            bytCommand = Encoding.ASCII.GetBytes(strMessageObjArray);
            pRet       = udpClient.Send(bytCommand, bytCommand.Length);
            //Console.WriteLine("Sended");

            if (ReceiveInfo != null)
            {
                ReceiveInfo(this, new UDPInfo(UDPInfo.UDPInfoType.udpm_SendedConfirm, "Enviado", udpMessage.ToIP));
            }
        }
        catch (Exception e)
        {
            //Raise
            if (ReceiveException != null)
            {
                ReceiveException(this, e);
            }
            blReturn = false;
        }
        finally
        {
            udpClient.Close();
            udpClient = null;
        }
        return(blReturn);
    }
コード例 #15
0
    /// <summary>
    /// 受信したメッセージの内容によって処理を行う
    /// </summary>
    /// <param name="unit">受信情報</param>
    void Parse(ReceivedUnit unit)
    {
        //なるべくメッセージごと1関数で実装する
        UDPMessage type = unit.message.ToUDPMessage();
        int        ackRegisteredIndex = ackWaiting.IndexOfPort(unit.senderEP.Port);
        int        connectedIndex     = connectedPlayerEPs.IndexOfPort(unit.senderEP.Port);

        print("メッセージを受信");
        switch (type)
        {
        case UDPMessage.Ack:
        {
            print(ackRegisteredIndex);
            if (ackRegisteredIndex == -1)
            {
                break;
            }
            connectedPlayerEPs.Add(unit.senderEP);
            ackWaiting.RemoveAt(ackRegisteredIndex);
            if (connectedPlayerEPs.Count == 1)
            {
                sendThread = new Thread(new ThreadStart(ThreadSend));
                sendThread.Start();
            }
            print("他の人から接続がありました");
            byte[] message = UDPMessage.AckComplete.ToByte();
            client.SendAsync(message, message.Length, unit.senderEP);
            otherPlayerObjects[connectedPlayerEPs.Count - 1].SetActive(true);
            break;
        }

        case UDPMessage.AckComplete:
        {
            print(ackRegisteredIndex);
            if (ackRegisteredIndex == -1)
            {
                break;
            }
            connectedPlayerEPs.Add(unit.senderEP);
            ackWaiting.RemoveAt(ackRegisteredIndex);
            if (connectedPlayerEPs.Count == 1)
            {
                sendThread = new Thread(new ThreadStart(ThreadSend));
                sendThread.Start();
            }
            print("他の人から接続がありました");
            otherPlayerObjects[connectedPlayerEPs.Count - 1].SetActive(true);
            break;
        }

        case UDPMessage.PosUpdate:
        {
            Vector3 pos  = unit.message.ToVector3(4);
            float   Yrot = BitConverter.ToSingle(unit.message, 16);
            if (otherPlayerInfo.Count <= connectedIndex)
            {
                //プレイヤーのSmoothedMovementがない場合
                PositionAndRotation newPlayer = new PositionAndRotation(sendPerSecond);
                newPlayer.UpdateInformation(pos, Yrot);
                otherPlayerInfo.Add(newPlayer);
            }
            else
            {
                otherPlayerInfo[connectedIndex].UpdateInformation(pos, Yrot);
            }
            break;
        }

        default:
        {
            print("malformed packet!!!!!!!!!");
            break;
        }
        }
    }
コード例 #16
0
        static void ConsumeMessageUDP(UDPMessage msg, int netID)
        {
            switch (msg.MsgCase)
            {
            // Lock Step
            case UDPMessage.MsgOneofCase.Lockstepmsg:
            {
                break;
            }

            // Snapshot
            case UDPMessage.MsgOneofCase.Snapshotmsg:
            {
                //if (clients.Find(c => c.netID == netID).host)
                //Console.WriteLine("id" + netID + "id2 " + hostID);
                if (netID == hostID)
                {
                    // Send to clients
                    UDPSendMessageToAllButHost(msg);
                }
                else
                {
                    // Send to host
                    UDPSendMessageToClient(msg, hostID);
                }

                break;
            }

            // State
            case UDPMessage.MsgOneofCase.Statemsg:
            {
                if (netID == hostID)
                {
                    // Send to clients
                    UDPSendMessageToAllButHost(msg);
                }
                else
                {
                    // Send to host
                    UDPSendMessageToClient(msg, hostID);
                }

                break;
            }

            // Client Message
            case UDPMessage.MsgOneofCase.Udpstringmsg:
            {
                char     delimiterChar = ':';
                string[] messageSplit  = msg.Udpstringmsg.Msg.Split(delimiterChar);

                if (messageSplit[0] == "snapshotack")
                {
                    // Send to host
                    UDPSendMessageToClient(msg, hostID);
                }

                break;
            }

            // Client Input Message
            case UDPMessage.MsgOneofCase.Snapshotinputmsg:
            {
                // Apply NetID
                //msg.Snapshotinputmsg.Sequence = netID;

                // Send to host
                UDPSendMessageToClient(msg, hostID);
                break;
            }

            // Client Input Message
            case UDPMessage.MsgOneofCase.Stateack:
            {
                // Apply NetID
                //msg.Snapshotinputmsg.Sequence = netID;

                // Send to host
                UDPSendMessageToClient(msg, hostID);
                break;
            }

            // State Update
            case UDPMessage.MsgOneofCase.Predictionreconciliationmsg:
            {
                if (netID == hostID)
                {
                    // Send to clients
                    UDPSendMessageToAllButHost(msg);
                }
                else
                {
                    // Send to host
                    UDPSendMessageToClient(msg, hostID);
                }

                break;
            }

            // State Update
            case UDPMessage.MsgOneofCase.Predictionreconciliationinputmsg:
            {
                // Apply NetID
                msg.Predictionreconciliationinputmsg.Netid = netID;

                // Send to host
                UDPSendMessageToClient(msg, hostID);
                break;
            }

            // State Update
            case UDPMessage.MsgOneofCase.Servertimerequestmsg:
            {
                // Apply NetID

                if (netID == hostID)
                {
                    // Send to clients
                    UDPSendMessageToAllButHost(msg);
                }
                else
                {
                    // Send to host
                    msg.Servertimerequestmsg.ClientID = netID;
                    UDPSendMessageToClient(msg, hostID);
                }

                break;
            }
            }
        }
コード例 #17
0
    private void ReceiveMessages()
    {
        try
        {
            string strIP;
            string strResult;
            if (receivingUdpClient == null)
            {
                return;
            }

            Byte []  receiveBytes = receivingUdpClient.Receive(ref RemoteIpEndPoint);
            BitArray BitDet;
            BitDet    = new BitArray(receiveBytes);
            strResult = Encoding.ASCII.GetString(receiveBytes);
            string[] strResults = strResult.Split(m_separator, StringSplitOptions.None);
            strIP = RemoteIpEndPoint.Address.ToString();

            UDPMessage udpMes = new UDPMessage();
            udpMes.MessageType = (UDPMessage.UDPMessageType)
                                 Enum.Parse(typeof(UDPMessage.UDPMessageType), strResults[0]);
            udpMes.Title           = strResults[1];
            udpMes.Message         = strResults[2];
            udpMes.FromIP          = strIP; //strResults[4];
            udpMes.ToIP            = strResults[4];
            udpMes.FromName        = strResults[5];
            udpMes.DateSended      = strResults[6];
            udpMes.Port            = int.Parse(strResults[7]);
            udpMes.ID              = int.Parse(strResults[8]);
            udpMes.IDSource        = int.Parse(strResults[9]);
            udpMes.RequireReceived = bool.Parse(strResults[10]);


            if (udpMes.MessageType == UDPMessage.UDPMessageType.udpm_Common &&
                udpMes.RequireReceived)
            {
                UDPMessage udpConf = new UDPMessage();
                udpConf.MessageType = UDPMessage.UDPMessageType.udpm_ReceivedConfirm;
                udpConf.Message     = "Mensaje recibido en " + udpMes.ToIP;
                udpConf.ToIP        = strIP;
                udpConf.Port        = udpMes.Port;
                Send(udpConf);
                udpConf = null;
            }

            if (udpMes.MessageType == UDPMessage.UDPMessageType.udpm_CrossCheck)
            {
                UDPMessage udpConf = new UDPMessage();
                udpConf.MessageType = UDPMessage.UDPMessageType.udpm_ReceivedConfirm;
                udpConf.Message     = ">>>" + udpMes.ToIP;
                udpConf.ToIP        = strIP;
                udpConf.Port        = udpMes.Port;
                Send(udpConf);
                udpConf = null;
            }

            if (ReceiveMessage != null)
            {
                ReceiveMessage(this, udpMes);
            }

            NewInitialize();

            //udpMes = null;
            //receiveBytes = null;
            //BitDet = null;
        }
        catch (Exception e)
        {
            //Raise
            if (ReceiveException != null)
            {
                ReceiveException(this, e);
            }
        }
    }
コード例 #18
0
        /// <summary>
        /// 接收发送给本机ip对应端口号的数据报
        /// </summary>
        public void ReciveMsg(CancellationToken token)
        {
            Task.Factory.StartNew(() =>
            {
                int cNumber = 0;  //客户端个数
                while (!token.IsCancellationRequested)
                {
                    EndPoint point    = new IPEndPoint(IPAddress.Any, 0);                 //用来保存发送方的ip和端口号
                    byte[] buffer     = new byte[1024];
                    int length        = server.ReceiveFrom(buffer, ref point);            //接收数据报
                    string message    = Encoding.UTF8.GetString(buffer, 0, length);
                    string reciveTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.fff"); //接收时间
                    UDPMessage msgObj = JsonConvert.DeserializeObject <UDPMessage>(message);
                    LogRealize.GetInstance().WriteLog(msgObj);                            //写日志
                    string tempLevel = string.Empty;                                      //日志级别
                    switch (msgObj.Level)
                    {
                    case LogLevel.Debug:
                        tempLevel = "Debug";
                        break;

                    case LogLevel.Info:
                        tempLevel = "Info";
                        break;

                    case LogLevel.Error:
                        tempLevel = "Error";
                        break;

                    case LogLevel.Warn:
                        tempLevel = "Warn";
                        break;

                    case LogLevel.Fatal:
                        tempLevel = "Fatal";
                        break;
                    }
                    LogMessage uiMsgObj = new LogMessage()
                    {
                        RTime     = reciveTime,
                        LogLevel  = tempLevel,
                        Message   = msgObj.Message,
                        Exception = msgObj.Exception
                    };
                    var cPoint = point.ToString();
                    if (logPages.Count > 0)
                    {
                        var logPageObj = logPages.Find(p => p.Point.Equals(cPoint));
                        if (logPageObj != null)
                        {
                            if (logPageObj.QMesages.Count > 1000)
                            {
                                logPages.Find(p => p.Point.Equals(cPoint)).QMesages.Dequeue();
                            }
                            logPages.Find(p => p.Point.Equals(cPoint)).QMesages.Enqueue(uiMsgObj);
                            MesageQueueEvent(logPages.Find(p => p.Point.Equals(cPoint)));
                        }
                        else
                        {
                            cNumber += 1;
                            logPages.Add(new LogPage()
                            {
                                Point    = cPoint,
                                QMesages = new Queue <LogMessage>()
                            });
                            logPages.Find(p => p.Point.Equals(cPoint)).QMesages.Enqueue(uiMsgObj);
                            LogPageQueueEvent();
                        }
                    }
                    else
                    {
                        logPages.Add(new LogPage()
                        {
                            Point    = cPoint,
                            QMesages = new Queue <LogMessage>()
                        });
                        logPages.Find(p => p.Point.Equals(cPoint)).QMesages.Enqueue(uiMsgObj);
                        LogPageQueueEvent();
                    }
                }
            }, token);
        }
コード例 #19
0
ファイル: UDPServices.cs プロジェクト: adesproject/ADES
 public void sendMessage(IMessage msg, int msgID)
 {
     int dataLen = UDPServer.UDP_MAX_PACKET_SIZE - UDPMessage.getHeaderSize();
     byte[] buffer = msg.toByteArray();
     for (int i = 0; i < buffer.Length; i = i + dataLen)
     {
         UDPMessage udpMsg = null;
         if (i + dataLen < buffer.Length)
         {
             udpMsg = new UDPMessage(dataLen);
         }
         else
         {
             udpMsg = new UDPMessage(buffer.Length - i);
         }
         Buffer.BlockCopy(buffer, i, udpMsg.Data, 0, udpMsg.Data.Length);
         udpMsg.MessageID = msgID;
         udpMsg.MessageOffset = i;
         udpMsg.MessageSize = buffer.Length;
         sendData(udpMsg);
     }
 }
コード例 #20
0
 static void UDPSendMessageToClient(UDPMessage message, int netID)
 {
     UDPSendMessage(((IPEndPoint)clients[netID - 1].workSocket.RemoteEndPoint).Address.ToString(), message.ToByteArray());
 }
コード例 #21
0
ファイル: UDPServices.cs プロジェクト: adesproject/ADES
 public void sendData(UDPMessage udpMessage)
 {
     try
     {
         //IPHostEntry remoteHostEntry = Dns.GetHostEntry(host);
         IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Parse(udpAddress.HostIP), (int)udpAddress.Sp);
         EndPoint remoteEndPoint = (remoteIpEndPoint);
         int nBytesSent = so.SendTo(udpMessage.toByteArray(), remoteIpEndPoint);
     }
     catch (Exception e)
     {
         Console.WriteLine("An Exception Occurred - sendData!" + e.ToString());
     }
 }
コード例 #22
0
 public static byte[] ToByte(this UDPMessage udpm)
 {
     return(BitConverter.GetBytes((int)udpm));
 }