private static readonly IPAddress GroupAddress = IPAddress.Parse("192.168.0.3");
private const int GroupPort = 1868;
private Thread m_listenerThread;
private System.Windows.Forms.Timer m_eventTimer;
private Queue<String> m_msgQueue;
private int x0 = 1;
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void MainForm_Load(object sender, EventArgs e)
{
m_eventTimer = new System.Windows.Forms.Timer();
m_msgQueue = new Queue<string>();
m_eventTimer.Interval = 100;
m_eventTimer.Tick+=new EventHandler(m_eventTimer_Tick);
ThreadStart th=new ThreadStart(StartListen);
m_listenerThread = new Thread(th);
m_listenerThread.Start();
m_eventTimer.Start();
}
private void m_eventTimer_Tick(object sender,EventArgs e)
{
if (m_msgQueue.Count > 0)
{
String str = m_msgQueue.Dequeue();
m_msg.Text += str;
}
}
private void StartListen()
{
bool done = false;
UdpClient listener = new UdpClient(1858);
IPEndPoint groupEP = new IPEndPoint(GroupAddress, 1868);
listener.EnableBroadcast = true;
try
{
listener.Connect(groupEP);
while (!done)
{
Console.WriteLine("Waiting for broadcast");
byte[] bytes = listener.Receive(ref groupEP);
String str;
if ('P' == bytes[0])
{
str = String.Format("{0}/r/n", Encoding.ASCII.GetString(bytes, 0, bytes.Length));
m_msgQueue.Enqueue(str);
}
//else
//{
// int subNumber=GetSubSys(bytes[1]);
// int zone = GetZone(bytes[2]);
// bool zoneValid = false;
// int state = GetZoneState(bytes[3],ref zoneValid);
// str = String.Format("状态:{0} 子系统:{1} 防区:{2} 状态:{3} 设备状态:{4} 针对防区:{5}/r/n", bytes[0], subNumber, zone, state, bytes[4], zoneValid);
// if (subNumber > 0 && subNumber < 5 && state > 0 && bytes[4]==4)
// {
// m_msgQueue.Enqueue(str);
// }
//}
}
listener.Close();
}
catch (Exception e2)
{
// m_msg.Text += e2.Message;
}
}