软件编程
位置:首页>> 软件编程>> C#编程>> C#实现的Socket服务器端、客户端代码分享

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

作者:junjie  发布时间:2021-09-29 00:22:28 

标签:C#,Socket,服务器端,客户端

服务端:


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;
       }
   }
 }
}
0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com