2013-06-21 120 views
0

我需要从telnet连接读取异步数据。而远程库给出一个处理程序,所以我设置这种方式:C#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

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

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

这只会帮助你,如果你发送的字节/和receving字节,如果你发送一个字符串,这样将无法工作。