我需要在.Net中开发一个Internet打印协议网关,它将接收使用AirPrint客户端从IOS触发的打印作业。网关将接收文件并将其发布到打印队列中。我可以使用Apple提供的SDK广播我的打印服务。但是,当我监听端口接收文档的网络流时,由于客户端始终在发送流,因此无法检测到接收到的流的结束。我的猜测是我们必须阅读属性并作出相应的回应,但我不知道这些属性。以下是我目前使用的代码:如何使用C#实现IPP网关?
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'发送你的响应。您还可以使用像Wireshark这样的分析工具来分析IPP服务器/客户端,以便更好地理解您必须从客户端接收/响应的女巫。 – Milad
您的理解正确,但我没有airprinting的规格,这就是为什么我不知道要写入流的值。我在RFC中搜索,发现一个如上面的“继续”字符串中所示,但它不是很有帮助。 – Saket