c# - Why is my web socket receiving data packets in the wrong order? -
i have c# desktop app sends jpegs server @ rate of 10 per second.
each jpeg has time stamp part of header , read server.
i experiencing disorderly arrival on server.
the majority of time jpegs received sever in order have been sent client.
but, every , order becomes 'jumbled'.
are tcp packets supposed guaranteed sent in order or subject delays network/internet?
if order guaranteed post code.
thanks
my code:
on client:
class websocketclient { static websocket websocket = null; public static void start() { try { console.writeline("started at: " + datetime.now.tostring()); if (websocket != null) { websocket.dispose(); } websocket = new websocket("ws://a uri"); websocket.opened += new eventhandler(websocketclient_opened); websocket.error += websocket_error; websocket.closed += new eventhandler(websocketclient_closed); websocket.messagereceived += new eventhandler<messagereceivedeventargs>(websocketclient_messagereceived); websocket.open(); } catch (exception ex) { console.writeline(ex.tostring() + " debug#8"); } } private static bool timeoutoccured = false; private static datetime stopped; public static void send(byte[] packet) { try { if (websocket.state == websocketstate.open) { if (packet != null) { websocket.send(packet, 0, packet.length); } timeoutoccured = false; } else { if (timeoutoccured) { console.writeline("timeout at: " + datetime.now.tostring()); if ((datetime.now - stopped).totalseconds > 30) { websocket.opened -= new eventhandler(websocketclient_opened); websocket.error -= websocket_error; websocket.closed -= new eventhandler(websocketclient_closed); websocket.messagereceived -= new eventhandler<messagereceivedeventargs>(websocketclient_messagereceived); start(); } } else { timeoutoccured = true; stopped = datetime.now; } } } catch (exception ex) { console.writeline(ex.tostring() + " debug#9"); } } static void websocket_error(object sender, supersocket.clientengine.erroreventargs ex) { try { console.writeline("error at: " + datetime.now.tostring()); shared.adderror("websocketclient.websocket_error", ex.exception); } catch (exception x) { console.writeline(x.tostring() + " debug#10"); } } protected static void websocketclient_messagereceived(object sender, messagereceivedeventargs e) { try { var m_currentmessage = e.message; } catch (exception ex) { console.writeline(ex.tostring() + " debug#11"); } } protected static void websocketclient_closed(object sender, eventargs e) { try { console.writeline("closed at: " + datetime.now.tostring()); if (websocket.state == websocketstate.closed) { system.threading.thread.sleep(1000); start(); } } catch (exception ex) { console.writeline(ex.tostring() + " debug#12"); } } protected static void websocketclient_opened(object sender, eventargs e) { console.writeline("opened at: " + datetime.now.tostring()); } }
my server code:
public void start2() { try { var server = new websocketserver("my wan uri"); ilog logger = logmanager.getlogger(typeof(flecklog)); flecklog.logaction = (level, message, ex) => { switch (level) { case loglevel.debug: //gger.debug(message, ex); break; case loglevel.error: socketmessage("3", message, ex); break; case loglevel.warn: socketmessage("4", message, ex); break; default: socketmessage("5", message, ex); break; } }; server.start(socket => { socket.onopen = () => evstatuschanged("open!"); socket.onclose = () => evstatuschanged("close!"); socket.onerror = error => { console.writeline("debug:1 " + error.tostring()); }; socket.onbinary = packetin => { try { //i check timestamps in headers here } catch (exception ex) { console.writeline(ex.tostring() + " serverwebsocket.websocketserver_newdatareceived.catch3"); } }; socket.onmessage = message => { }; }); } catch (exception ex) { console.writeline(ex.tostring() + " serverwebsocket.start2"); } }
i using websocket4net client socket framework
Comments
Post a Comment