Files

94 lines
1.8 KiB
C#
Raw Permalink Normal View History

2023-05-11 18:10:26 +09:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp.TelnetSamples
{
public class SocketTelnetClient : ITelnetClient
{
private Socket _socket;
public string Connect(string ip, int port = 23)
{
try
{
Close();
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_socket.ReceiveTimeout = 1000;
2023-05-12 17:55:51 +09:00
IPAddress ipAddress = Dns.GetHostAddresses(ip)[0];
2023-05-11 18:10:26 +09:00
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, port);
_socket.Connect(ipEndPoint);
return Read();
}
catch (Exception)
{
throw;
}
}
2023-05-12 17:55:51 +09:00
private string Read()
2023-05-11 18:10:26 +09:00
{
StringBuilder sb = new StringBuilder();
byte[] readBuffer = new byte[1024];
while (true)
{
int bytesRead = _socket.Receive(readBuffer);
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);
}
public string SendCommand(string command)
{
try
{
command += "\r\n";
byte[] sendBytes = Encoding.ASCII.GetBytes(command);
_socket.Send(sendBytes);
return Read();
}
catch (Exception)
{
throw;
}
}
public void Close()
{
try
{
if (_socket == null)
return;
_socket.Shutdown(SocketShutdown.Both);
_socket.Close();
_socket.Dispose();
}
catch (Exception)
{
throw;
}
}
}
}