我需要在.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