Beispiel #1
0
        private NetworkFrame receiveNetworkFrame(int timeout = 10000)
        {
            NetworkFrame nf = new NetworkFrame();

            socket.ReceiveTimeout = timeout;
            try
            {
                int rec = socket.Receive(nf.Code);
                if (rec.Equals(0))
                {
                    throw new Exception("Not responding");
                }
                if (nf.needMoreData())
                {
                    rec = 0;
                    while (rec < 4)
                    {
                        rec += socket.Receive(nf.Size, rec, 4 - rec, SocketFlags.None);
                    }
                    nf.nSize = IPAddress.NetworkToHostOrder(nf.nSize);
                    if (nf.nSize > 10000)
                    {
                        throw new Exception("File too big");
                    }
                    nf.Data = new byte[nf.nSize];
                    rec     = 0;
                    while (rec < nf.nSize)
                    {
                        rec += socket.Receive(nf.Data, rec, nf.nSize - rec, SocketFlags.None);
                    }
                    Console.WriteLine("FROM " + socket.RemoteEndPoint + ": Code=" + nf.eCode + " Size=" + nf.nSize);
                    if (nf.nSize < 100)
                    {
                        Console.Write(" Data=" + nf.sData);
                    }
                    Console.Write("\n");
                }
                else
                {
                    Console.WriteLine("FROM " + socket.RemoteEndPoint + ": Code=" + nf.eCode);
                }
                return(nf);
            }
            catch (SocketException se)
            {
                throw new SocketException(se.ErrorCode);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
Beispiel #2
0
        public void sendCmd(Command cmd, int timeout = 0)
        {
            NetworkFrame nf = cmd.toNetworkFrame();

            socket.SendTimeout = timeout;
            try
            {
                int sent = socket.Send(nf.Code);
                if (sent.Equals(0))
                {
                    throw new Exception("Not responding");
                }
                if (nf.needMoreData())
                {
                    sent = 0;
                    int hSize = nf.nSize;
                    nf.nSize = IPAddress.HostToNetworkOrder(nf.nSize);
                    do
                    {
                        sent += socket.Send(nf.Size, sent, 4 - sent, SocketFlags.None);
                    } while (sent < 4);
                    //int hSize = IPAddress.NetworkToHostOrder(nf.nSize);
                    sent = 0;
                    do
                    {
                        sent += socket.Send(nf.Data, sent, hSize - sent, SocketFlags.None);
                    } while (sent < hSize);
                    Console.Write("  TO " + socket.RemoteEndPoint + ": Code=" + nf.eCode + " Size=" + hSize);
                    if (hSize < 100)
                    {
                        Console.Write(" Data=" + nf.sData);
                    }
                    Console.Write("\n");
                }
                else
                {
                    Console.WriteLine("  TO " + socket.RemoteEndPoint + ": Code=" + nf.eCode);
                }
            }
            catch (SocketException se)
            {
                throw new SocketException(se.ErrorCode);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }