C# で telnet クライアントとサーバーを作成しています。問題は、クライアントでコマンドを与えるときです。私のサーバーは次のエラーを返します:「システムは指定されたファイルを見つけることができません」
サーバーはコンソール アプリにあり、クライアントは winform にあります。どうもありがとうございました。
コードは次のとおりです。 サーバー
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Diagnostics;
namespace TelnetServerVictim
{
class Program
{
static void Main(string[] args)
{
IPAddress HOST = IPAddress.Parse("127.0.0.1");
IPEndPoint serverEP = new IPEndPoint(HOST, 443);
Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sck.Bind(serverEP);
sck.Listen(443);
try
{
Console.WriteLine("Listening for clients...");
Socket msg = sck.Accept();
while (true)
{
// Send a welcome greet
byte[] buffer = Encoding.Default.GetBytes("Welcome to the server of Kobernicus!!");
msg.Send(buffer, 0, buffer.Length, 0);
buffer = new byte[255];
// Read the sended command
int rec = msg.Receive(buffer, 0, buffer.Length, 0);
byte[] bufferReaction = Encoding.Default.GetBytes(rec.ToString());
// Run the command
Process prcsCMD = new Process();
prcsCMD.StartInfo.FileName = bufferReaction.ToString();
prcsCMD.StartInfo.UseShellExecute = false;
prcsCMD.StartInfo.Arguments = string.Empty;
prcsCMD.StartInfo.RedirectStandardOutput = true;
prcsCMD.Start();
string output = prcsCMD.StandardOutput.ReadToEnd();
byte[] cmdOutput = Encoding.Default.GetBytes(output);
msg.Send(cmdOutput,0,cmdOutput.Length,0);
cmdOutput = new byte[255];
}
sck.Close();
msg.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
クライアント:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace TelnetClientME
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket sck;
private void btnConnect_Click(object sender, EventArgs e)
{
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 443);
try
{
sck.Connect(endPoint);
MessageBox.Show("You are connected to the server!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void btnSendMSG_Click(object sender, EventArgs e)
{
byte[] buffer = Encoding.Default.GetBytes(txtCMD.Text);
sck.Send(buffer, 0, buffer.Length, 0);
buffer = new byte[255];
int rec = sck.Receive(buffer, 0, buffer.Length, 0);
txtOutputCMD.Text = rec.ToString();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtOutputCMD.Clear();
}
private void btnExit_Click(object sender, EventArgs e)
{
sck.Close();
Application.Exit();
}
}
}
どうもありがとうございました。txtOutputCMD = コマンドの出力があるべきリッチテキストボックス。txtCMD = コマンドを入力できるテキストボックス。