TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
sameer
NA
1
0
c# windows service tcp socket server
May 27 2009 5:21 AM
Hi,
I think this is the closest thread I could find, I have been going crazy trying to find what is wrong with my code. I am writing a Windows Service which is a TCP server that executes Power Shell scripts and send the result back to clients. I call the service by sending a simple string as paramater like: perl client.pl get-command . The server returns the results and my perl client receives and displays them. Here is the code, and I will be very thankful for any tips and pointers:
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
public TcpListener threadListener;
public Service1()
{
InitializeComponent();
}
TcpListener server = null;
Thread serverThread = null;
bool serverPaused = false;
protected override void OnStart(string[] args)
{
serverThread = new Thread(new ThreadStart(Serve));
serverThread.Start();
}
protected override void OnStop()
{
}
private void Serve()
{
server = new TcpListener(IPAddress.Any, 8888);
server.Start();
while (server != null)
{
try
{
if (serverPaused) { Thread.Sleep(10); continue; }
Socket s = server.AcceptSocket();
EventLog.WriteEntry("Accepted " + ((IPEndPoint)s.RemoteEndPoint));
string welcome = "Message from PowerShell Server ...";
byte[] b = System.Text.Encoding.ASCII.GetBytes(welcome);
s.Send(b, b.Length, 0);
EventLog.WriteEntry("Sent welcome to " + ((IPEndPoint)s.RemoteEndPoint));
//PS Server Code
byte[] data = new byte[204800];
int recv;
TcpClient client = threadListener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
recv = ns.Read(data, 0, data.Length);
string cmd = Encoding.ASCII.GetString(data, 0, recv);
string stringRunShell = RunShell(cmd);
byte[] byteData = Encoding.ASCII.GetBytes(stringRunShell.ToString());
// Begin sending the data to the remote machine.
if (byteData.Length > 0)
{
ns.Write(byteData, 0, byteData.Length);
ns.Close();
}
else
{
ns.Write(data, 0, recv);
}
s.Close();
}
catch (System.Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
}
public string RunShell(string cmd)
{
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(cmd);
//Conver the objects returned to formatted strings
pipeline.Commands.Add("Out-String");
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
StringBuilder builtString = new StringBuilder();
foreach (PSObject obj in results)
{
builtString.AppendLine(obj.ToString());
}
//Console.WriteLine(stringBuilder.ToString());
return builtString.ToString();
}
}
}
Thanks
-Sami
Reply
Answers (
0
)
Silverlight Barcode Software
Parent Canvas mouse button effecting on Child Canvas