我正在开发一个从文本文件加载一组打印机的应用程序:
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();
}
问题是大多数这些打印机都在工厂里,我需要找到最接近客户的标签打印机,我能够获得客户信息:
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);
我也有每台打印机的IP地址,因为我使用IP地址打印。我的问题是如何基于客户端的IP和打印机的IP找到最接近的IP?
还有其他替代方法吗?我在网上看了很多但却找不到足够的信息。
答案 0 :(得分:0)
在公司网络中,交换机可能会被设备为将设备与具有已知位置的端口相关联。我已经支持了几十个网络,从未见过你所要求的细节。理论上你可以,如果网络支持可以保持更新的记录,哪些交换机端口进入什么墙端口。通常,打印机只能位于某个级别的几个位置,并且每个级别都有一个子网。许多网络都在暗示他们的姓名或描述位置。
或者,如果这不只是白天做梦而你确实需要它,我会看一个单独的位置感知系统,如rfid资产跟踪,甚至只是让所有打印机都使用wifi。企业wifi阵列可以估算设备位置(我知道Xirrus可以做到这一点,它对最近的打印机运行良好)。编辑:然后要获取设备的位置,您在wifi阵列上使用SNMP查询。