c# telnet应用程序的单线程事件处理程序
本文关键字:事件处理 程序 单线程 telnet 应用程序 | 更新日期: 2023-09-27 18:19:18
我需要从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)],但不起作用。你有什么建议?
只在发送数值时发生吗?如果这样,你必须转换hostnetorder和NetworkToHostOrder,这些方法存在于IPAddress类中。
// When Receive
IPAddress.NetworkToHostOrder(BitConverter.ToInt32(bytearray, 0));
// When Send
IPAddress.HostToNetworkOrder(ID)
这只会帮助你发送字节/接收字节,如果你发送一个字符串,这种方式将不起作用