ich auf einer Anwendung arbeite, die eine Reihe von Druckern aus einer Textdatei geladen:Suche nach dem nächsten Drucker an den Client im Netzwerk
protected void LoadPrinterList()
{
string CSVFilePathName = System.Configuration.ConfigurationManager.AppSettings["FilePath"];
string[] Lines = File.ReadAllLines(CSVFilePathName);
string[] Fields;
Fields = Lines[0].Split(new char[] { ',' });
int Cols = Fields.GetLength(0);
DataTable dt = new DataTable();
//1st row must be column names; force lower case to ensure matching later on.
for (int i = 0; i < Cols; i++)
dt.Columns.Add(Fields[i].ToLower(), typeof(string));
dt.Columns.Add("nameanddescription", typeof(string), "name +'-'+ description");
dt.Columns.Add("ipandconnectionstring", typeof(string), "ip +'-'+ ConncetionStringID");
DataRow Row;
for (int i = 1; i < Lines.GetLength(0); i++)
{
Fields = Lines[i].Split(new char[] { ',' });
Row = dt.NewRow();
for (int f = 0; f < Cols; f++)
Row[f] = Fields[f];
dt.Rows.Add(Row);
}
string hostname = Request.UserHostName.Substring(0, 3);
string[] name = Printerlist.SelectedValue.Split('-');
//string plant = name[0].ToString();
//string plantvalue = plant.Substring(0, 3);
//if(hostname == plantvalue)
//{
Printerlist.DataTextField = "nameanddescription";
Printerlist.DataValueField = "ipandconnectionstring";
//}
Printerlist.DataSource = dt;
Printerlist.DataBind();
}
Das Problem ist, die meisten dieser Drucker in der Anlage sind und ich muß die nächsten Etikettendrucker an den Client finden, ich bin in der Lage, die Kundeninformationen zu erhalten:
public static string DetermineCompName(string IP)
{
IPAddress myIP = IPAddress.Parse(IP);
IPHostEntry GetIPHost = Dns.GetHostEntry(myIP);
List<string> compName = GetIPHost.HostName.ToString().Split('.').ToList();
return compName.First();
}
string IP = Request.UserHostName;
string compName = CompNameHelper.DetermineCompName(IP);
ich habe auch die IP-Adresse von jedem des Druckers, weil ich die IP-Adresse drucken. Meine Frage ist, wie kann ich basierend auf der IP des Clients und der IP des Druckers den nächstgelegenen finden?
Gibt es eine alternative Problemumgehung? Ich habe viel online gesucht, konnte aber nicht genug Informationen dazu finden.
einfache Antwort - Sie können nicht, in der Regel gibt es keine Beziehung zwischen Entfernung und IP-Adresse, vor allem im internen LAN –
Die einzige mögliche Sache, die ich hier denken könnte, ist jedes Mal ping und dann den Durchschnitt von allen die pings, und dann, was auch immer der niedrigste ist, können Sie schätzen, dass man am nächsten ist, aber wahrscheinlich immer fast immer falsch. – pay
Ich bezweifle, es wird ein Weg sein, dies zu tun http://superuser.com/questions/ 327417/is-it-possible-find-a-printers-physisch-location-in-building-by-its-ip-adr –