要在WEB上遠程管理客戶端軟件。那我們就仿路由器那種模式用SOCKET來解決吧。
做了個DEMO,本機測試OK,拿到別的機器上做服務器,提示由於目標機器積極拒絕,無法連接。
查詢各種資料,有的說是端口沒開,有的說是服務沒開。
各種霧水啊!仔細一想,問題可能出在本機在局域網IP上,而不是用127.0.0.1。
更正代碼后,問題解決。下面演示服務器端代碼的關鍵部分。
protected void Listen() { MessageBox.Show("start listening"); stringip = ""; System.Net.IPHostEntryIpEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); for (int i = 0; i != IpEntry.AddressList.Length; i++) { if (!IpEntry.AddressList[i].IsIPv6LinkLocal) { ip= IpEntry.AddressList[i].ToString(); } } IPEndPointipend = new IPEndPoint(IPAddress.Parse(ip), 8000); Socket sc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sc.Bind(ipend); Socket acc; while (true) { sc.Listen(1); acc= sc.Accept(); byte[] buff = new byte[1024]; intrecbyte = acc.Receive(buff, buff.Length, 0); if (recbyte == 0) break; stringreciveval = ""; reciveval += Encoding.GetEncoding("gb2312").GetString(buff, 0, recbyte); string returnval = "開始升級"; byte[] returnBy = Encoding.GetEncoding("gb2312").GetBytes(returnval); acc.Send(returnBy, returnBy.Length, 0); } acc.Close(); sc.Close(); } public string sendMessage() { IPEndPointipend = new IPEndPoint(IPAddress.Parse("192.168.XXX.XXX"),8000); Socket sc = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); sc.Connect(ipend); string message = "請升級軟件"; byte[] bt = Encoding.GetEncoding("gb2312").GetBytes(message); sc.Send(bt,bt.Length,0); byte[] rebuff = new byte[1024]; intrecive = sc.Receive(rebuff, rebuff.Length, 0); stringreturnval = ""; returnval += Encoding.GetEncoding("gb2312").GetString(rebuff, 0, recive); sc.Close(); returnreturnval; }