繁体   English   中英

C#telnet应用程序的单线程事件处理程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM