2014-09-29 119 views
0

我有点新来C#和我试图创建一个Modbus-TCP从站。阅读tcp通过事件

我想要做的就是当我从TCP主站接收数据时调用一个事件处理程序。

namespace Mark_II.Device 
{ 
    class Slave_TCP : mSlave 
    { 
     short trans_ID; 
     byte[] Respond;  
     byte[] MasterMessage; 
     TcpClient Client; 
     NetworkStream stream; 


     public Slave_TCP(String IP, int Port) 
     { 
      Client = new TcpClient(IP, Port); 

      stream = Client.GetStream(); 
      // insert "call event handler" here<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     } 


     private void client_OnReceiveData(object sender, SerialDataReceivedEventArgs e) 
     { 
      byte[] message = new byte[Client.ReceiveBufferSize];      
      stream.Read(message, 0, message.Length); 

     } 
    } 
} 

我一直在环顾四周,但我找不到任何东西......请帮助我。

tl; dr:当我的客户端收到主数据时,我正在寻找提升事件的方法。

回答

0

在一般情况下,在C#中的事件是这样的:

public delegate void MessageHandler(string message); 

public class Client 
{ 
    public event MessageHandler MessageArrived; 

    public void CheckForMessage() //logic to check if message is received 
    { 
    //other code to check for message 
     if(MessageArrived != null) 
     MessageArrived("message received"); 
    } 
} 

public class DisplayMessage 
{ 
    public void DisplayMessage(string message) 
    { 
    Console.WriteLine("Message: {0}", message); 
    } 
} 

代码挂钩的事件:

public class ProcessMessage 
{ 
    Client client = new Client(); 
    DisplayMessage msg = new DisplayMessage(); 
    client.MessageArrived += new MessageHandler(msg.DisplayMessage); 
    client.CheckForMessage(); 
} 
+0

,首先非常感谢您的回答 我查一下,如果我可以以某种方式将它放入我的“新”代码中,但是如何将此“CLient”与C#类“TCPClient”连接?它不是一个对象吗? – Davant 2014-10-01 19:57:31

+0

不看代码就很难说清楚。但是如果你想'TcpClient'生成'event',那么在'TcpClient'中使用'client'类代码。如果它适合您,请将其标记为答案。 – 2014-10-02 13:37:18