parent
b469188f28
commit
59f0977eaf
@ -0,0 +1,105 @@ |
|||||||
|
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; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue