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

时间:2013-06-21 13:56:38

标签: c# sockets thread-safety telnet

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

1 个答案:

答案 0 :(得分:0)

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

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

这只会在您发送字节/接收字节时帮助您,如果您以这种方式发送字符串将无效。