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); }
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); }
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); }