C# 枚举我的Windows Phone应用程序中可用的WiFi打印机
我知道类似的问题也被问了很多,比如“我可以从wp8打印吗?”。大多数人似乎满足于简单的“不”回答。我希望将此功能添加到我的应用程序中,我知道它可以在某种程度上实现-即使我现在只能支持非常小的打印机设置 我看过这个应用程序,它似乎有我需要的功能:打印到无线和蓝牙打印机 我已经浏览了一些场景文档,我认为这可能有助于发现蓝牙打印机。这是一个开始。也许这也有助于识别无线打印机 我意识到我需要从一个非常小的项目开始,我想首先尝试列举当前网络上可用的任何无线打印机(我还没有蓝牙打印机)。有没有人会碰巧有一个关于如何开始的正确方向的指针,或者更好的是,一些相关的示例代码C# 枚举我的Windows Phone应用程序中可用的WiFi打印机,c#,printing,windows-phone-8,C#,Printing,Windows Phone 8,我知道类似的问题也被问了很多,比如“我可以从wp8打印吗?”。大多数人似乎满足于简单的“不”回答。我希望将此功能添加到我的应用程序中,我知道它可以在某种程度上实现-即使我现在只能支持非常小的打印机设置 我看过这个应用程序,它似乎有我需要的功能:打印到无线和蓝牙打印机 我已经浏览了一些场景文档,我认为这可能有助于发现蓝牙打印机。这是一个开始。也许这也有助于识别无线打印机 我意识到我需要从一个非常小的项目开始,我想首先尝试列举当前网络上可用的任何无线打印机(我还没有蓝牙打印机)。有没有人会碰巧有一个
非常感谢 我能提供的最好的东西是我的Github回购协议,它与Wifi打印机无关,而是谷歌云打印 在他们的文档中并没有关于使用Google Cloud Print的.net参考资料,但是这些代码可以在Mono中工作,并且应该可以很容易地转移到.net和Windows Phone
我能够使用简单的服务发现协议检测到附近的无线打印机 以下是我的示例函数:
private const string SSDP_IP = "239.255.255.250";
private const string SSDP_PORT = "1900";
public async static void DiscoverAsync2()
{
var multicastIP = new HostName(SSDP_IP);
var found = false;
using (var socket = new DatagramSocket())
{
socket.MessageReceived += (sender, e) =>
{
var reader = e.GetDataReader();
var bytesRemaining = reader.UnconsumedBufferLength;
var receivedString = reader.ReadString(bytesRemaining);
// TODO: something useful with this new info
found = true;
};
await socket.BindEndpointAsync(null, string.Empty);
socket.JoinMulticastGroup(multicastIP);
while (true)
{
found = false;
using (var stream = await socket.GetOutputStreamAsync(multicastIP, SSDP_PORT))
{
var request = new StringBuilder();
request.AppendLine("M-SEARCH * HTTP/1.1");
request.AppendLine("HOST: " + SSDP_IP + ":" + SSDP_PORT);
request.AppendLine("MAN: \"ssdp:discover\"");
request.AppendLine("MX: 3");
request.AppendLine("ST: urn:schemas-upnp-org:device:Printer:1"); // use ssdp:all to get everything
request.AppendLine(); // without this extra blank line, query won't run properly
var buff = Encoding.UTF8.GetBytes(request.ToString());
await stream.WriteAsync(buff.AsBuffer());
await Task.Delay(5000);
if (!found)
break;
}
}
}
您也可以考虑为打印机命令语言创建一个类,但我知道知识库的开发非常紧张。。以及那些坐下来并掌握它的人。。好。。他们做得很好,这成为他们的职业。这也是一件很难在网上研究和弄清楚的事情。在我能够识别并联系打印机之前,PCL不会有多大帮助。不过,谢谢。SNMP可能会帮助您在网络中查找打印机。谢谢,我只是在研究SNMP和套接字的可能性。我没有发现任何错误,如何显示无线打印机是c#的新手。这将列举UPnP打印机(我发现它们并不多)。许多较新的打印机实现某种形式的IPP,并且可以通过多播dns请求发现(上述解决方案未解决)。您可以通过web搜索找到一些适用于Windows的zeroconfig库。