我需要从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)],但是没有用。 你有什么建议?
答案 0 :(得分:0)
仅在发送数值时才会发生这种情况吗?如果是这样,你必须转换HostToNetwork命令和NetworkToHostOrder,这些方法都存在于IPAddress类中。
// When Receive
IPAddress.NetworkToHostOrder(BitConverter.ToInt32(bytearray, 0));
// When Send
IPAddress.HostToNetworkOrder(ID)
这只会在您发送字节/接收字节时帮助您,如果您以这种方式发送字符串将无效。