/// <summary> /// Resolves hostname to IP Address /// </summary> /// <param name="serverEndPoint">Server IP end point</param> /// <returns>True if resolve is successfull</returns> private bool GetHostnameEndPoint(out IPEndPoint serverEndPoint) { serverEndPoint = new IPEndPoint(IPAddress.Any, 0); bool resolveSuccess; try { // Find suitable IP address var addressList = Dns.GetHostAddresses(HostName); foreach (var ipAddress in addressList) { if (ipAddress.AddressFamily == AddressFamily.InterNetwork) { serverEndPoint.Address = ipAddress; break; } } serverEndPoint.Port = RemotePort; resolveSuccess = true; // Raise event if registered OnHostnameResolved?.Invoke(serverEndPoint); } catch (SocketException socketException) { // Raise event if registered OnSocketException?.Invoke(socketException); resolveSuccess = false; } return(resolveSuccess); }
/// <summary> /// Main thread method /// </summary> private void ClientThread() { IPEndPoint responseEndPoint = null; IPEndPoint serverEndPoint; var loopCount = (RepeatCount == 0) ? 1 : RepeatCount - 1; // Resolve server IP end point _clientRunning = GetHostnameEndPoint(out serverEndPoint); #region Main loop while (_clientRunning && loopCount >= 0) { try { // Do we have local port assigned? _udpClient = (LocalPort > 0) ? new UdpClient(LocalPort) : new UdpClient(); // Send data _udpClient.Send(EchoPattern, EchoPattern.Length, serverEndPoint); // Get the start time var echoStart = DateTime.Now; _udpClient.Client.ReceiveTimeout = ResponseTimeout * 1000; var responseData = _udpClient.Receive(ref responseEndPoint); // Raise event if registered if (OnEchoResponse != null) { var echoTime = DateTime.Now - echoStart; OnEchoResponse(responseEndPoint, echoTime, Utils.CompareByteArrays(EchoPattern, responseData)); } } catch (SocketException socketException) { // Raise event if registered OnSocketException?.Invoke(socketException); } finally { _udpClient.Close(); } // Infinite test if (RepeatCount > 0) { loopCount--; } Thread.Sleep(100); } #endregion // End up thread legaly _clientRunning = false; EndClientThread(); }
private void DispatchSocketError(Exception exception) { _userInitiatedDisconnect = false; foreach (IParseLiveQueryClientCallbacks callback in _callbacks) { callback.OnSocketError(this, exception); } OnSocketException?.Invoke(exception); DispatchDisconnected(); }
private void S_OnError(Exception obj) { log.Write(LogVerbosity.Debug, $"Socket catched exception {obj.ToString()}"); OnSocketException?.Invoke(obj); }
/// <summary> /// Main thread method /// </summary> private void ClientThread() { IPEndPoint serverEndPoint; var receiveBuffer = new byte[4096]; var loopCount = (RepeatCount == 0) ? 1 : RepeatCount - 1; // Resolve server IP end point _clientRunning = GetHostnameEndPoint(out serverEndPoint); if (_clientRunning) { try { // Do we have local port assigned? _tcpClient = (LocalPort > 0) ? new TcpClient(new IPEndPoint(IPAddress.Any, LocalPort)) : new TcpClient(); _tcpClient.Connect(serverEndPoint); OnConnect?.Invoke(_tcpClient.Client.RemoteEndPoint); var networkStream = new NetworkStream(_tcpClient.Client) { ReadTimeout = ResponseTimeout * 1000, WriteTimeout = ResponseTimeout * 1000 }; #region Main Loop while (_clientRunning && loopCount >= 0) { // Send data networkStream.Write(EchoPattern, 0, EchoPattern.Length); // Get the start time var echoStart = DateTime.Now; // Read the data var bytesRead = networkStream.Read(receiveBuffer, 0, receiveBuffer.Length); var receivedData = new byte[bytesRead]; Array.Copy(receiveBuffer, receivedData, bytesRead); // Raise event if registered if (OnEchoResponse != null) { var echoTime = DateTime.Now - echoStart; OnEchoResponse(serverEndPoint, echoTime, Utils.CompareByteArrays(EchoPattern, receivedData)); } // Infinite test if (RepeatCount > 0) { loopCount--; } Thread.Sleep(100); } #endregion networkStream.Close(); networkStream = null; } catch (SocketException socketException) { // Raise event if registered OnSocketException?.Invoke(socketException); } catch (IOException ioException) { // Raise event if the inner exception is SocketException if (ioException.InnerException.GetType() == typeof(SocketException)) { OnSocketException?.Invoke((SocketException)ioException.InnerException); } } finally { _tcpClient.Close(); _tcpClient = null; } } // End up thread legaly _clientRunning = false; EndClientThread(); }