Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举我的Windows Phone应用程序中可用的WiFi打印机_C#_Printing_Windows Phone 8 - Fatal编程技术网

C# 枚举我的Windows Phone应用程序中可用的WiFi打印机

C# 枚举我的Windows Phone应用程序中可用的WiFi打印机,c#,printing,windows-phone-8,C#,Printing,Windows Phone 8,我知道类似的问题也被问了很多,比如“我可以从wp8打印吗?”。大多数人似乎满足于简单的“不”回答。我希望将此功能添加到我的应用程序中,我知道它可以在某种程度上实现-即使我现在只能支持非常小的打印机设置 我看过这个应用程序,它似乎有我需要的功能:打印到无线和蓝牙打印机 我已经浏览了一些场景文档,我认为这可能有助于发现蓝牙打印机。这是一个开始。也许这也有助于识别无线打印机 我意识到我需要从一个非常小的项目开始,我想首先尝试列举当前网络上可用的任何无线打印机(我还没有蓝牙打印机)。有没有人会碰巧有一个

我知道类似的问题也被问了很多,比如“我可以从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库。