c# - socket.BeginReceive() renders printer unresponsive -


i've been developing application automatically prints pdf files on specific network printers upon arrival , monitoring @pjl ustatus job messages. however, whenever begin application , code hits socket.beginreceive(), printer unable receive print jobs workstation means callback never called. however, if close application or socket, printer begins working again.

am missing anything? blocking/non-blocking or synchronous or asynchronous sockets?

public class socketdata {     public socket socket;     public byte[] databuffer = new byte[1024]; }  public void start() {     // start thread checks printer status     thread = new thread(new threadstart(connectandlisten));     thread.priority = threadpriority.lowest;     thread.start();      // start file listener     listener = new filesystemwatcher(this.watchpath);     listener.created += new filesystemeventhandler(listener_created);     listener.enableraisingevents = true; }  public void connectandlisten() {         ipendpoint = new ipendpoint(dns.gethostentry(this.ipaddress).addresslist[0], 9100);         socket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp);         socket.connect(ipendpoint);          //socket.send(encoding.ascii.getbytes("\x1b%-12345x@pjl ustatus device = on\r\n\x1b%-12345x\r\n"));         //socket.send(encoding.ascii.getbytes("\x1b%-12345x@pjl ustatus job = on\r\n\x1b%-12345x\r\n"));         socket.send(encoding.ascii.getbytes("\x1b%-12345x@pjl ustatus page = on\r\n\x1b%-12345x\r\n"));         //socket.send(encoding.ascii.getbytes("\x1b%-12345x@pjl ustatus timed = 0\r\n\x1b%-12345x\r\n"));          listenforprinterreadback(socket); }  public void listenforprinterreadback(socket socket) {     if (datarecievedcallback == null) {         datarecievedcallback = new asynccallback(ondatareceived);     }      socketdata socketdata = new socketdata();     socketdata.socket = socket;      m_asynresult = socket.beginreceive(socketdata.databuffer, 0, socketdata.databuffer.length, socketflags.none, datarecievedcallback, socketdata); }  public void ondatareceived(iasyncresult asyn) {     socketdata socketdata = (socketdata)asyn.asyncstate;      int result = socketdata.socket.endreceive(asyn);      char[] chars = new char[result + 1];     decoder d = encoding.utf8.getdecoder(); //creating object decoding     int charlen = d.getchars(socketdata.databuffer, 0, result, chars, 0);     string recieveddata = new string(chars);      this.status = recieveddata;      listenforprinterreadback(socketdata.socket); } 

i know polling, won't able receive unsolicited printer messages.

thanks in advance!

update: i'm getting feeling 1 socket connection allowed on printers. since socket.beginreceive() can work if socket connected, other requests cannot sent since socket being used. maybe there's way handle unsolicited printer readbacks?

do send report bytes have been sent (check it's return value)? can't spot errors prevent other end receiving message. 100% sure string sending correct?


Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -