Я пытаюсь создать API для связи с сетевыми активами, поэтому я создал класс, который реализует соединение и диалог с этими активами, но при отладке, когда точка останова достигает значения while
во второй раз, консоль срабатываеткак если бы он запрашивал взаимодействие с пользователем.
using Provisioning.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Provisioning.Contexts
{
public class TL1Context : IDisposable, ITL1Context
{
private static readonly TcpClient _tcpClient = new TcpClient();
public TL1Context(string addr, int port)
{
_tcpClient.Connect(addr, port);
if (!_tcpClient.Connected)
throw new TimeoutException("Not has possible connect to TL1 server.");
Login();
}
public TL1Context()
{
_tcpClient.Connect("10.1.5.12", 3337);
if (!_tcpClient.Connected)
throw new TimeoutException("Not has possible connect to TL1 server.");
Login();
}
private void Login()
{
var strin = $"LOGIN:::CTAG::UN=GEPON,PWD=GEPON;" +
$"LOGIN:::C000::UN=GEPON,PWD=GEPON;" +
$"SHAKEHAND:::CTAG::;";
var returnedMessage = this.SendMessage(strin);
}
private string SendMessage(string Message)
{
try
{
var stream = _tcpClient.GetStream();
byte[] messageSent = Encoding.ASCII.GetBytes(Message);
stream.Write(messageSent);
var messageReceived = new byte[1024];
string textedMessage = string.Empty;
using (var ms = new MemoryStream())
{
int numBytesRead;
while ((numBytesRead = stream.Read(messageReceived, 0, messageReceived.Length)) > 0)
{
ms.Write(messageReceived, 0, numBytesRead);
textedMessage += Encoding.ASCII.GetString(ms.ToArray(), 0, (int)ms.Length);
}
Console.WriteLine("NOT EXECUTE THIS");
return textedMessage;
}
}
catch (Exception e)
{
throw;
}
}
public void Logout()
{
var strin = $"LOGOUT:::CTAG::;";
this.SendMessage(strin);
}
public IList<ONUAvailable> GetOnusUnauthorizated(List<OLT> olts)
{
// TODO
foreach (var olt in olts)
{
var strin = $"LST-UNREGONU::OLTID={olt.IpAddress.ToString()}:CTAG::;" +
$"LST-UNREGONU::OLTID={olt.IpAddress.ToString()}:C000::;";
var response = this.SendMessage(strin);
}
return null;
}
public void Dispose()
{
this.Logout();
_tcpClient.Dispose();
}
}
}
Консольное приложение для отладки
using Provisioning.Contexts;
using Provisioning.Models;
using System;
using System.Collections.Generic;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
var tl1 = new TL1Context();
// NOT EXECUTE THIS
Console.WriteLine(tl1._tcpClient.Connected);
tl1.GetOnusUnauthorizated(new List<OLT>() {
new OLT() { IpAddress = new System.Net.IPAddress(new byte[] {192, 168, 99, 2 })
}
});
}
catch (Exception)
{
throw;
}
}
}
}
В обоих случаях следующие строки TL1Context никогда не выполняются
Console.WriteLine("NOT EXECUTE THIS");
return textedMessage;
@ Edit: включено консольное приложение для отладки
@ Редактировать: я понял, что NetworkStream, свойство TcpClient, с некоторыми исключениями, может ли это быть причиной?