Exemplo n.º 1
0
            public bool NetInit()
            {
                UDPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                //----------------------
                // The sockaddr_in structure specifies the address family,
                // IP address, and port for the socket that is being bound.
                int optval_buflen = 0x200000;

                Strinfo.Add(@"[UDP] -- Start Udp communication...");
                UDPsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
                UDPsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, optval_buflen);
                UDPsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer, optval_buflen);
                iFrame = 0;
                return(true);
            }
Exemplo n.º 2
0
            public bool NetInit()
            {
                TCPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                //----------------------
                // The sockaddr_in structure specifies the address family,
                // IP address, and port for the socket that is being bound.
                try
                {
                    TCPsocket.Connect(new IPEndPoint(IPAddress.Parse(server_IP), server_Port)); //配置服务器IP与端口
                }
                catch (SocketException)
                {
                    Strinfo.Add(@"[TCP]--Error at Connect()");
                    return(false);
                }

                Strinfo.Add(@"[TCP] -- Start TCP communication...");
                int optval_buflen = 0x200000;

                TCPsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, optval_buflen);
                TCPsocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
                iFrame = 0;
                return(true);
            }
Exemplo n.º 3
0
            public void NetEcho()
            {
                byte[] rcvbuf = new byte[65524];
                byte[] sndbuf = new byte[65524];

                ushort sndlength;
                ushort rcvlength = 0;

                sndbuf[0] = 0x7;
                sndbuf[1] = 0;

                RCVSTATUS m_rcvStatus = RCVSTATUS.RCV_OK;

                for (int cnt = 2; cnt < 65524; cnt++)
                {
                    sndbuf[cnt] = 0x7;
                }

                EndPoint sendpoint = new IPEndPoint(IPAddress.Parse(server_IP), server_Port);
                EndPoint recvpoint = new IPEndPoint(IPAddress.Any, 0);
                int      curRcvLen;
                int      tmpSndLen;
                int      tmpRcvLen;

                long nStart = 0;
                long nEnd   = 0;
                int  tDelt;
                int  bWide;

                DateTime tNow;

                tNow = DateTime.Now;

                udp_sw.WriteLine(tNow + "[UDP]--Communication Start");

                while ((RCVSTATUS.RCV_CONNERROR != m_rcvStatus) && udp_cond)
                {
                    if (ModeRising == mode)
                    {
                        sndlength = (ushort)(iFrame % 0xfe00 + 9);
                    }
                    else
                    {
                        sndlength = constLen;
                    }

                    iFrame++;
                    m_rcvStatus = RCVSTATUS.RCV_OK;

                    QueryPerformanceCounter(ref nStart);

                    try
                    {
                        tmpSndLen = UDPsocket.SendTo(sndbuf, sndlength, 0, sendpoint);

                        curRcvLen = 0;

                        while (curRcvLen < tmpSndLen)
                        {
                            try
                            {
                                tmpRcvLen = UDPsocket.ReceiveFrom(rcvbuf, curRcvLen, tmpSndLen - curRcvLen, 0, ref recvpoint);
                                if (tmpRcvLen > 0)
                                {
                                    curRcvLen += tmpRcvLen;
                                }
                                else if (tmpRcvLen == 0 || -1 == tmpRcvLen)
                                {
                                    tNow = DateTime.Now;
                                    udp_sw.WriteLine(tNow + "[UDP]--recv tmpRcvLen error");
                                    m_rcvStatus = RCVSTATUS.RCV_CONNERROR;
                                    break;
                                }
                            }
                            catch (SocketException ex)
                            {
                                if (ex.SocketErrorCode == SocketError.TimedOut)
                                {
                                    tNow = DateTime.Now;

                                    udp_sw.WriteLine(tNow + $"[UDP]--select {iFrame:X} timeout");
                                    udp_sw.WriteLine("curRcvLen = {0:X}, tmpSndLen = {1:X} sndAllLength= {2:X}, sndBuf= {3:X}", curRcvLen, tmpSndLen, sndlength, sndbuf[2]);
                                    m_rcvStatus = RCVSTATUS.RCV_TIMEOUT;
                                    break;
                                }
                                tNow = DateTime.Now;
                                udp_sw.WriteLine(tNow + $"[UDP]--select {iFrame:X}" + ex.SocketErrorCode);
                                m_rcvStatus = RCVSTATUS.RCV_CONNERROR;
                                break;
                            }
                        }

                        QueryPerformanceCounter(ref nEnd);
                        bool res = true;
                        for (var i = 0; i < tmpSndLen; i++)
                        {
                            if (sndbuf[i] == rcvbuf[i])
                            {
                                continue;
                            }
                            res = false;
                            break;
                        }

                        if (m_rcvStatus == RCVSTATUS.RCV_OK && (curRcvLen != tmpSndLen || res))
                        {
                            tNow = DateTime.Now;
                            udp_sw.WriteLine(tNow + "[UDP]-- {0:x} data error", iFrame);
                            m_rcvStatus = RCVSTATUS.RCV_DATAERROR;
                        }
                    }
                    catch (SocketException ex)
                    {
                        tNow = DateTime.Now;
                        udp_sw.WriteLine(tNow + $"[UDP]--send {iFrame:x} error " + ex.SocketErrorCode);
                        m_rcvStatus = RCVSTATUS.RCV_CONNERROR;
                    }



                    switch (m_rcvStatus)
                    {
                    case RCVSTATUS.RCV_OK:
                        tDelt = (int)(nEnd - nStart);
                        bWide = (int)(sndlength * 2 * 8 * 1000 / (double)tDelt);        //kbps
                        Strinfo.Add($@"[UDP] -- length: {sndlength:X6}, data_error={eData:d}, time_out={eTimeout:d}, {tDelt:d3}us /{bWide:d}kbps");
                        break;

                    case RCVSTATUS.RCV_DATAERROR:
                        eData++;
                        Strinfo.Add($"[UDP] -- length:{sndlength:X6}, data_error={eData:d}, time_out={eTimeout:d}");
                        break;

                    case RCVSTATUS.RCV_TIMEOUT:
                        eTimeout++;
                        Strinfo.Add($"[UDP] -- length:{sndlength:X6}, data_error={eData:d}, time_out={eTimeout:d}");
                        break;

                    case RCVSTATUS.RCV_CONNERROR:
                        Strinfo.Add("[UDP] -- connection error.");
                        goto ret;
                    }
                }
ret:
                tNow = DateTime.Now;
                udp_sw.WriteLine(tNow + "[UDP]--Communication Stop");
                udp_sw.WriteLine("data_error = {0:d}, time_out = {1:d}", eData, eTimeout);
            }