J'ai besoin de développer une passerelle Internet Printing Protocol dans .Net qui recevra les travaux d'impression tirés d'IOS en utilisant le client AirPrint. La passerelle recevra le document déclenché et le relâchera dans la file d'attente d'impression. Je suis capable de diffuser mes services d'impression en utilisant le SDK fourni par Apple. Cependant, lorsque j'écoute sur un port pour recevoir des flux réseau d'un document, je ne suis pas en mesure de détecter la fin du flux reçu car le client continue d'envoyer des flux. Je suppose que nous devons lire les attributs et répondre en conséquence, mais je n'ai aucune idée de ces attributs. Voici le code que je suis actuellement en utilisant:Comment implémenter la passerelle IPP en utilisant 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);
}
À partir du client IPP, il continue à envoyer le flux d'en-tête et aucune donnée jusqu'à ce qu'il obtienne une réponse. Je voulais savoir si je pouvais détecter la fin des données et ensuite envoyer la réponse attendue au client. – Saket
Si je vous ai bien compris, vous devriez vérifier les octets reçus (les convertir en chaîne) et si vous avez reçu la valeur attendue de 'TcpClient', envoyez votre réponse avec' stream.Write'. Vous pouvez aussi analyser un serveur/client IPP avec des outils d'analyse comme 'Wireshark' pour une meilleure compréhension de ce que vous devez recevoir/répondre de/vers le client. – Milad
Vous l'avez bien compris, mais je n'ai pas de spécification pour l'impression aérienne, c'est pourquoi je ne sais pas quelles valeurs écrire pour streamer. J'ai cherché dans RFC et en ai trouvé un comme indiqué ci-dessus dans la chaîne "Continue", mais cela ne m'a pas beaucoup aidé. – Saket