首页 > 编程 > C# > 正文

C#实现的Socket服务器端、客户端代码分享

2020-01-24 02:35:39
字体:
来源:转载
供稿:网友

服务端:

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;        }    }  }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表