/// <summary> /// Send an RTSP request and retrieve the response. /// </summary> /// <param name="request">The request.</param> /// <param name="response">The response.</param> /// <returns>the response status code</returns> public RtspStatusCode SendRequest(RtspRequest request, out RtspResponse response) { response = null; lock (_lockObject) { NetworkStream stream = null; try { stream = _client.GetStream(); if (stream == null) { throw new Exception(); } } catch { _client.Close(); } try { if (_client == null) { _client = new TcpClient(_serverHost, 554); } // Send the request and get the response. request.Headers.Add("CSeq", _cseq.ToString(CultureInfo.InvariantCulture)); byte[] requestBytes = request.Serialise(); stream.Write(requestBytes, 0, requestBytes.Length); _cseq++; byte[] responseBytes = new byte[_client.ReceiveBufferSize]; int byteCount = stream.Read(responseBytes, 0, responseBytes.Length); response = RtspResponse.Deserialise(responseBytes, byteCount); // Did we get the whole response? string contentLengthString; int contentLength = 0; if (response.Headers.TryGetValue("Content-Length", out contentLengthString)) { contentLength = int.Parse(contentLengthString); if ((string.IsNullOrEmpty(response.Body) && contentLength > 0) || response.Body.Length < contentLength) { if (response.Body == null) { response.Body = string.Empty; } while (byteCount > 0 && response.Body.Length < contentLength) { byteCount = stream.Read(responseBytes, 0, responseBytes.Length); response.Body += System.Text.Encoding.UTF8.GetString(responseBytes, 0, byteCount); } } } return(response.StatusCode); } finally { stream.Close(); } } }
private void SendRequest(RtspRequest request) { if (_rtspSocket == null) { Connect(); } try { request.Headers.Add("CSeq", _rtspSequenceNum.ToString()); _rtspSequenceNum++; byte[] requestBytes = request.Serialise(); if (_rtspSocket != null) { var requestBytesCount = _rtspSocket.Send(requestBytes, requestBytes.Length, SocketFlags.None); if (requestBytesCount < 1) { } } } catch (Exception e) { Logger.Error(e.Message); } }