[英]Single thread event handler for a C# telnet application
我需要从telnet连接读取异步数据。 Telnet库提供了一个处理程序,因此我以这种方式进行设置:
public PortechGSMBox(string ipaddress, int port, String user, String password, int modulenum = 1)
{
telnet = new TelnetWrapper();
telnet.DataAvailable += new DataAvailableEventHandler(DataReceivedHandler);
telnet.Disconnected += new DisconnectedEventHandler(DisconnectHandler);
telnet.Connect(ipaddress, port);
Login(user, password, modulenum);
}
private void DataReceivedHandler(object src, DataAvailableEventArgs args)
{
output+=args.data
}
我看到接收到的数据没有按正确的顺序接收,可能是因为该事件来自多个线程。 因此,如果服务器发送“ 123456789”,我可以收到“ 56781234”。 我试图在DataHandler之前添加[MethodImpl(MethodImplOptions.Synchronized)],但不起作用。 你有什么建议?
仅在发送数值时会发生这种情况吗? ,如果必须这样做,则必须转换HostToNetwork order和NetworkToHostOrder,这些方法在IPAddress类上存在。
// When Receive
IPAddress.NetworkToHostOrder(BitConverter.ToInt32(bytearray, 0));
// When Send
IPAddress.HostToNetworkOrder(ID)
仅当您发送字节/并接收字节时,这才对您有帮助,如果您以这种方式发送字符串不起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.