Мне нужно разработать шлюз протокола интернет-печати в .Net, который получит задания печати, запущенные из IOS, с использованием клиента AirPrint. Шлюз будет получать документ и отпустить его в очередь печати. Я могу транслировать свои службы печати, используя SDK от Apple. Однако, когда я слушаю порт, чтобы получать сетевые потоки документа, я не могу обнаружить конец потока, полученный, когда клиент продолжает отправлять потоки. Я предполагаю, что мы должны прочитать атрибуты и ответить соответственно, но я не знаю этих атрибутов. Ниже приведен код, который я в настоящее время с помощью:Как реализовать шлюз IPP с помощью C#?
IPAddress ipAddress = IPAddress.Parse("10.0.0.13");
IPAddress tcpListener = new TcpListener(ipAddress, 631);
tcpListener.Start();
while (true)
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
byte[] bytes = new byte[2560];
NetworkStream stream = tcpClient.GetStream();
stream.Read(bytes, 0, bytes.Length);
string mstrMessage = Encoding.ASCII.GetString(bytesReceived, 0, bytesReceived.Length);
string Continue = "HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nCache-Control: no-cache\r\nDate: " + dateTime + "\r\nPragma: no-cache\r\nTransfer-Encoding: chunked\r\nContent-Type: application/ipp\r\n\r\nattributes-charset utf-8 attributes-natural-language en-us compression-supported none printer-is-accepting-jobs true document-format-supported application/pdf\r\n\r\n0\r\n";
bytesSent = Encoding.ASCII.GetBytes(mstrResponse);
stream.Write(bytesSent, 0, bytesSent.Length);
}
От клиента IPP, он продолжает посылать поток с заголовком и никаких данных, пока не получит какое-либо ответ. Я хотел знать, могу ли я обнаружить конец данных, а затем отправить ответ, ожидаемый клиенту. – Saket
Если я четко понял вас, вы должны проверить полученные байты (преобразовать их в строку), и если вы получили ожидаемое значение из 'TcpClient', отправьте свой ответ с помощью' stream.Write'. Также вы можете проанализировать IPP-сервер/клиент с помощью инструментов анализатора, таких как «Wireshark», для лучшего понимания того, что вы должны получать/отвечать от клиента. – Milad
Вы поняли это правильно, но у меня нет спецификаций для печати, поэтому я не знаю, какие значения нужно писать в поток. Я искал в RFC и нашел один, как показано выше, в строке «Продолжить», но это не очень помогает. – Saket