c# winform 远程桌面时如何获得本地IP
c# winform程序
远程桌面时如何获得本地IP
例如:电脑A通过远程桌面连接电脑B上的程序,如何在这个程序里获得A的IP地址
[解决办法]
//获取远程主机IP public string[] getRemoteIP(string RemoteHostName) { IPHostEntry ipEntry = Dns.GetHostByName(RemoteHostName); 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); }
[解决办法]
哈哈~ 看看这段代码~
服务器端做一个程序,设定好IP地址和端口号,启动Listening事件
客户端直接用TCP/ip协议连接服务器的IP和端口号,发送请求事件,获取返回内容
这个是以前写的一个小程序的代码,你可以看看有没有帮助:
private void StartServer()
{
string strIP = txtServerIP.Text.Trim();
string strPort = txtServerPort.Text.Trim();
string strFolder = this.txtSavePath.Text.Trim();
Regex re = new Regex(@"^([\d]{4,5})$");
Regex re1 = new Regex(@"^\d{2,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");
if (!re1.Match(strIP).Success)
{
MessageBox.Show("服务器地址错误!");
txtServerIP.Focus();
}
else
{
if (!re.Match(strPort).Success)
{
MessageBox.Show("服务器端口号错误,正确的端口号应为1024-65535之间!");
txtServerPort.Focus();
}
else
{
int intPort = Convert.ToInt32(strPort);
if (intPort < 1024 || intPort > 65535)
{
MessageBox.Show("服务器端口号错误,正确的端口号应为1024-65535之间!");
txtServerPort.Focus();
}
else
{
if (strFolder == "")
{
MessageBox.Show("错误的文件保存路径");
txtSavePath.Focus();
}
else
{
if (!System.IO.Directory.Exists(strFolder))
{
MessageBox.Show("错误的文件保存路径");
txtSavePath.Focus();
}
else
{
if (strFolder.Substring(strFolder.Length - 1, 1) != "\\") strFolder += "\\";
MyServer server = new MyServer();
txtServerIP.Enabled = false;
txtServerPort.Enabled = false;
txtSavePath.Enabled = false;
blnIsOpen = true;
this.button1.Enabled = false;
this.button2.Enabled = true;
listBox1.Items.Clear();
listBox1.Items.Add("正在启动监听......");
server.Folder = strFolder;
server.IP = strIP;
server.Port = intPort;
Thread th = new Thread(new ThreadStart(server.Start));
th.IsBackground = true;
th.Start();
while (blnIsOpen)
{
Application.DoEvents();
string strMsg = server.State;
string strErr = server.Error;
if (strMsg != "")
{
if (listBox1.Items.Count > 100)
{
listBox1.Items.Clear();
}
listBox1.Items.Add(strMsg);
server.State = "";
}
if (strErr != "")
{
txtErr.Text += "\r\n" + System.DateTime.Now + " " + strErr;
server.Error = "";
th.Abort();
intErrNum++;
this.tabPage2.Text = "错误信息(" + intErrNum.ToString() + ")";
}
if (server.NeedReset)
{
//th.Abort();
StartServer();
}
}
}
}
}
}
}
}
public class MyServer
{
string strState = "";
string strErr = "";
string strIP = "";
int intPort = 0;
bool blnClose=false;
TcpListener listener;
string strPath = "";
bool blnNeedReset = false;
public MyServer()
{
blnClose = false;
}
public void Start()
{
strErr = "";
try
{
listener = new TcpListener(IPAddress.Parse(strIP), intPort);
Application.DoEvents();
listener.Start(200);
strState = "启动成功,正在监听是否有连接进入......";
Application.DoEvents();
while (!blnClose)
{
Application.DoEvents();
TcpClient client = listener.AcceptTcpClient();
Socket s = client.Client;
strState = DateTime.Now+" 已有客户端连接:"+s.RemoteEndPoint.ToString();
NetworkStream stream = client.GetStream();
byte[] msg = new byte[256];
int bytes = stream.Read(msg, 0, msg.Length);
string strMsg = System.Text.Encoding.Default.GetString(msg, 0, bytes);
Application.DoEvents();
string strTempMsg=DownLoadFile(strMsg);
//strState = "正在返回数据...";
Application.DoEvents();
//
byte[] byteResponse = System.Text.Encoding.Default.GetBytes(strTempMsg);
stream.Write(byteResponse, 0, byteResponse.Length);
Application.DoEvents();
//strState = "返回信息成功!";
s.Close();
client.Close();
}
}
catch (Exception err)
{
listener.Stop();
strErr = "MyServer.Start错误:" + err.Message;
blnNeedReset = true;
}
}
[解决办法]
//使用 GetHostAddresses 方法将 IP 地址解析为 IPAddress 类型的数组,
将其转换为string类型赋值给要显示的控件即可
string hostname=Dns.GetHostName();
public void DoGetHostAddresses(string hostname)
{
IPAddress[] ips;
ips = Dns.GetHostAddresses(hostname);
Console.WriteLine("GetHostAddresses({0}) returns:", hostname);
foreach (IPAddress ip in ips)
{
//Console.WriteLine(" {0}", ip);
this.textBox1.Text = ip.ToString();
}
}
[解决办法]
private void GetIP() { string HostName = Dns.GetHostName();//通过DNS获得当前主机的主机名 IPAddress[] AllIpList = Dns.GetHostAddresses(HostName);//获得当前主机的所有的IP 包括内网和外网的 string LocalIp = AllIpList[0].ToString();//本机局域网内的IP IPHostEntry NetWorkIP = Dns.GetHostByName(HostName); string NetIp = NetWorkIP.AddressList[NetWorkIP .AddressList .Length -1].ToString(); //获得本机外网的IP 也就是常说的ADSL的IP地址 MessageBox.Show(LocalIp + " " + NetIp); }