You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
2.0 KiB

2 years ago
using System;
using System.Net.Sockets;
using System.IO;
using System.Text;
using ConsoleApp.TelnetSamples;
namespace Samples.Telnet
{
public class StreamTelnetClient : ITelnetClient
{
private TcpClient _client;
private NetworkStream _stream;
private StreamReader _reader;
private StreamWriter _writer;
public string Connect(string ip, int port = 23)
{
try
{
Close();
_client = new TcpClient(ip, port);
// 스트림 생성
_stream = _client.GetStream();
_reader = new StreamReader(_stream);
_writer = new StreamWriter(_stream);
_writer.AutoFlush = true;
return Read();
}
catch (Exception)
{
throw;
}
}
public string Read()
{
try
{
StringBuilder sb = new StringBuilder();
byte[] readBuffer = new byte[1024];
while (true)
{
int bytesRead = _reader.BaseStream.Read(readBuffer, 0, readBuffer.Length);
if (bytesRead < 1)
break;
string data = Encoding.ASCII.GetString(readBuffer, 0, bytesRead);
sb.Append(data);
if (data.EndsWith("\r\n>"))
break;
}
// 에코 삭제
string read = sb.ToString();
int rnIdx = read.IndexOf("\r\n");
return read.Substring(rnIdx + 1);
}
catch (Exception)
{
throw;
}
}
public string SendCommand(string command)
{
try
{
_writer.WriteLine(command);
return Read();
}
catch (Exception)
{
throw;
}
}
public void Close()
{
try
{
if (_client == null)
return;
if (_stream != null)
{
_stream.Flush();
_stream.Close();
}
_client.Close();
_client.Dispose();
}
catch (Exception)
{
throw;
}
}
}
}