/// <summary> /// 客户端开发 /// </summary> class Program { static void Main(string[] args) { Console.WriteLine("Command=/Connect,HostNameOrIP/jiance/zhucex/zhuces/warring/suggest/mumawe/drop11/clear1/exit11/close1/autoru/logout/shdown"); mm m = new mm(); //m.ConnectionRequest("hsg"); m.ControlSetup("connect,192.168.1.139"); //m.TestConnectionHost(); m.ControlSetup("zhucex"); string line=Console.ReadLine(); while (line != "end") { m.ControlSetup(line); line = Console.ReadLine(); } } } public class mm { private TcpClient client = null; private int port = 6678; //1连接请求 public void ConnectionRequest(string HostName) //OK { try { if (this.stream != null) { this.stream.Close(); this.stream.Dispose(); this.stream = null; } if (this.client != null) { this.client.Close(); this.client = null; } this.client = new TcpClient(HostName, port); } catch(Exception ee) { Console.WriteLine(ee.Message); Console.WriteLine("服务器不在线!确定是否输入主机名称."); } } public void ConnectionRequestByIP(string IP) //??->每个socket地址只能用一次 { try { if (this.stream != null) { this.stream.Close(); this.stream.Dispose(); this.stream = null; } if (this.client != null) { this.client.Close(); this.client = null; } //IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Broadcast, 623); IPAddress ipaddr=IPAddress.Parse(IP); IPEndPoint m_ip = new IPEndPoint(ipaddr, port); this.client = new TcpClient(m_ip); } catch(Exception ee) { Console.WriteLine(ee.Message); Console.WriteLine("服务器不在线!确定是否输入IP地址192.168.1.1格式."); } } private NetworkStream stream=null; private Thread threadReceive = null; //2测试是否与被控制机连接上。 //程序的流程是发送控制码看控制端是否有反应, //如果有返回则显示控制成功 public bool TestConnectionHost() { bool rbc = false; Console.WriteLine("测试连接.."); try { stream = client.GetStream(); if (stream.CanWrite) { //发送控制码 string TestControl = "jiance"; byte[] by = System.Text.Encoding.ASCII.GetBytes(TestControl.ToCharArray()); stream.Write(by, 0, by.Length); //下次使用 stream.Flush(); //启动接收反回数据的线程 //receive是线程执行的函数,见后面的分析 threadReceive = new Thread(new ThreadStart(receive)); threadReceive.Start(); } } catch (Exception ee) { Console.WriteLine(ee.Message); } return rbc; } public string control = "zhucex"; //3控制生效的代码 public void ControlSetup(string pcontrol) //OK { //这里是确定要发送的控制码 control = pcontrol; //jiance/zhucex/zhuces/warring/suggest/mumawe/drop11/exit11 //--- string[] ctrlArray = pcontrol.Split(new char[] { ',' }); if (ctrlArray.Length >= 2) { string key=ctrlArray[0].Trim().ToUpper(); switch(key) { case "CONNECT": { this.ConnectionRequest(ctrlArray[1]); control = "jiance"; break; } case "CONNECTIP": { this.ConnectionRequestByIP(ctrlArray[1]); control = "jiance"; break; } default: break; } } if (control == "000000") { Console.WriteLine("你没有输入任何控制目标!不发控制信号"); } else if (control != "000000") { try { //记录操作 Console.WriteLine(control + "正在试图控制,等待回应......" + "/r"); stream = client.GetStream(); if (stream != null && stream.CanWrite == true) { byte[] by = System.Text.Encoding.ASCII.GetBytes(control.ToCharArray()); stream.Write(by, 0, by.Length); stream.Flush(); threadReceive = new Thread(new ThreadStart(receive)); threadReceive.Start(); } else { Console.WriteLine("获取数据流为空或不能写入操作!" + "/r"); }//endif }//try catch { Console.WriteLine("服务器未连接1控制无效!" + "/r"); } }//else if } //4线程执行的函数 private void receive() { try { if (stream != null && stream.CanRead == true) { //设置读取数据的空间 byte[] bb = new byte[3]; //读取3个字节,i为实际读取的字节数 int i = stream.Read(bb, 0, 3); //转换成字符串,如果是中文控制码则用string ss = //System.Text.Encoding.Unicode.GetString(bb); string ss = System.Text.Encoding.ASCII.GetString(bb); //hjc为我设置的服务器的返回码 hjc为连接成功,hkz为控制成功 if (ss == "hjc") { Console.WriteLine("连接成功"); } if (ss == "hkz") { Console.WriteLine(control + "控制成功" + "/r"); } if (ss == "ext") { Console.WriteLine(control + "控制成功,关闭系统" + "/r"); } } } catch(Exception ee) { Console.WriteLine(ee.Message); } } // public static string[] GetIPArrayByHostName(string hostName) { IPHostEntry ipEntry = Dns.GetHostEntry(hostName); IPAddress[] IpAddr = ipEntry.AddressList; string[] strAddr = new string[IpAddr.Length]; for (int i = 0; i < IpAddr.Length; i++) { strAddr[i] = IpAddr[i].ToString(); } return strAddr; } public static string GetIPByHostName(string hostName) { string strAddr = ""; IPHostEntry ipEntry = Dns.GetHostEntry(hostName); IPAddress[] IpAddr = ipEntry.AddressList; if (IpAddr != null && IpAddr.Length >= 1) { strAddr = IpAddr[0].ToString(); } return strAddr; } public static string LocalHostName { get { return Dns.GetHostName(); } } }