0

我需要从 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)] ,但不起作用。你有什么建议?

4

1 回答 1

0

仅在发送数值时才会发生这种情况吗?,如果是这样,您必须转换 HostToNetwork order 和 NetworkToHostOrder ,这些方法存在于 IPAddress 类中。

 // When Receive
 IPAddress.NetworkToHostOrder(BitConverter.ToInt32(bytearray, 0));
 // When Send
 IPAddress.HostToNetworkOrder(ID)

这只会在您发送字节/和接收字节时对您有所帮助,如果您以这种方式发送字符串将不起作用。

于 2013-06-21T14:19:37.380 回答