1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639: 640: 641: 642: 643: 644: 645: 646: 647: 648: 649: 650: 651: 652: 653: 654: 655: 656: 657: 658: 659: 660: 661: 662: 663: 664: 665: 666: 667: 668: 669: 670: 671: 672: 673: 674: 675: 676: 677:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Collections; using System.Net; using System.Net.Sockets; using System.Threading;
namespace SchneidConfigTool { public partial class Form1 : Form {
public Form1() { InitializeComponent();
this.listView1.View = View.Details;
listView1.Columns.Add(new ColHeader("Quelle", 110, HorizontalAlignment.Left, true)); listView1.Columns.Add(new ColHeader("Name", 110, HorizontalAlignment.Left, true)); listView1.Columns.Add(new ColHeader("Type", 70, HorizontalAlignment.Left, true));
this.listView1.ColumnClick += new ColumnClickEventHandler(listView1_ColumnClick); } public class TCP08VALUE { private string name; public string Name { get { return name; } set { name = value; } } } TCP08VALUE MA = new TCP08VALUE(); TCP08VALUE MC = new TCP08VALUE(); TCP08VALUE VR = new TCP08VALUE(); TCP08VALUE ST = new TCP08VALUE(); TCP08VALUE MN = new TCP08VALUE();
public class SortWrapper { internal ListViewItem sortItem; internal int sortColumn;
public SortWrapper(ListViewItem Item, int iColumn) { sortItem = Item; sortColumn = iColumn; }
public string Text { get { return sortItem.SubItems[sortColumn].Text; } }
public class SortComparer : IComparer { bool ascending;
public SortComparer(bool asc) { this.ascending = asc; }
public int Compare(object x, object y) { SortWrapper xItem = (SortWrapper)x; SortWrapper yItem = (SortWrapper)y;
string xText = xItem.sortItem.SubItems[xItem.sortColumn].Text; string yText = yItem.sortItem.SubItems[yItem.sortColumn].Text; return xText.CompareTo(yText) * (this.ascending ? 1 : -1); } } }
public class ColHeader : ColumnHeader { public bool ascending; public ColHeader(string text, int width, HorizontalAlignment align, bool asc) { this.Text = text; this.Width = width; this.TextAlign = align; this.ascending = asc; } }
private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) {
ColHeader clickedCol = (ColHeader)this.listView1.Columns[e.Column];
clickedCol.ascending = !clickedCol.ascending;
int numItems = this.listView1.Items.Count;
this.listView1.BeginUpdate();
ArrayList SortArray = new ArrayList(); for (int i = 0; i < numItems; i++) { SortArray.Add(new SortWrapper(this.listView1.Items[i], e.Column)); }
SortArray.Sort(0, SortArray.Count, new SortWrapper.SortComparer(clickedCol.ascending));
this.listView1.Items.Clear(); for (int i = 0; i < numItems; i++) this.listView1.Items.Add(((SortWrapper)SortArray[i]).sortItem);
this.listView1.EndUpdate(); }
String[] TCP08COMANDS = { "MC", "VR", "MN", "UN", "ST", "IM", "OP", "DD", "CP", "PO", "DG", "KA", "KI", "KE", "RI", "LI", "SM", "GW", "DS", "PI", "PP", "DX", "DP", "DI", "DW", "DH", "LP", "RP", "RH", "BR", "DB", "PR", "SB", "FL", "IT", "PT", "PS", "PD", "TE", "SS", "NP", "SP" };
const int PORT_NUMBERSend = 50001; public int PORT_NUMBERReceive; public int Port { get; set; } public String Messageback = ""; public String IPback = "";
Thread t = null; public void Start() { if (t != null) { throw new Exception("Already started, stop first"); } Console.WriteLine("Started listening"); StartListening();
} public void Stop() { try { udp.Close(); Console.WriteLine("Stopped listening"); } catch { } }
UdpClient udp = new UdpClient(50001); Socket sck = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint ip = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT_NUMBERSend);
IAsyncResult ar_ = null;
private void StartListening() { ar_ = udp.BeginReceive(Receive, new object()); udp.Client.ReceiveTimeout = 50000; if (IPback.Length > 1) SendtoTable(); } private void Receive(IAsyncResult ar) { UdpClient client = new UdpClient(); Messageback = ""; IPback = "";
IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, PORT_NUMBERReceive);
byte[] bytes = udp.EndReceive(ar, ref ip); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("From {0} received: {1} ", ip.Address.ToString(), message);
Messageback = message; IPback = ip.Address.ToString();
StartListening(); }
public void Sendbyte(byte[] message) {
UdpClient client = new UdpClient(); IPEndPoint ip = new IPEndPoint(IPAddress.Parse("255.255.255.255"), PORT_NUMBERSend);
byte[] bytes = message;
client.Send(bytes, bytes.Length, ip);
PORT_NUMBERReceive = ((System.Net.IPEndPoint)(client.Client.LocalEndPoint)).Port; StartListening(); Console.WriteLine("Source Port: {0}", PORT_NUMBERReceive.ToString()); Console.WriteLine("Destination Port: {0}", PORT_NUMBERSend.ToString()); }
private void SendtoTable() {
this.Invoke((MethodInvoker)delegate {
textBox2.Text = ("VON " + IPback + " MSG " + Messageback);
listView1.Items.Add(new ListViewItem(new string[] { IPback, Messageback, "TCP08" }));
}); }
public String SearchMSG08() { String ret = ""; int lengmsg = TCP08COMANDS.Length;
for (int i = 0; i < lengmsg; i++) ret += TCP08COMANDS[i] + "\r\n";
return ret;
}
public byte[] prefix_MA(string mac) {
byte[] ret = new byte[10]; ret[0] = 0x4d; ret[1] = 0x41; char[] delimiterChars = { ':' };
string[] s = mac.Split(delimiterChars);
if (s.Length == 6) { for (Int16 i = 0; i <= 5; i++) { ret[2 + i] = (byte)Convert.ToInt32(s[i], 16); } } else { for (Int16 i = 0; i <= 5; i++) { ret[2 + i] = 0xff; } } ret[8] = 0xd; ret[9] = 0xa;
return ret;
}
public byte[] SearchMSG08Byte(String PW) {
String msg = "";
if (PW.Length == 0) PW = " ";
int lengmsg = TCP08COMANDS.Length;
for (int i = 0; i < lengmsg; i++) msg += TCP08COMANDS[i] + "\r\n";
msg = "PW" + PW + "\r\n" + msg;
byte[] bMsg = System.Text.Encoding.ASCII.GetBytes(msg); byte[] ret = new byte[10 + bMsg.Length]; byte[] tmp = prefix_MA("FF:FF:FF:FF:FF:FF"); Array.ConstrainedCopy(tmp, 0, ret, 0, 10); Array.ConstrainedCopy(bMsg, 0, ret, 10, bMsg.Length);
return ret;
}
public void TCP08CON(string ipdest) { IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipdest), 50001); Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.SendTimeout = 50; sock.ReceiveTimeout = 50; if (null != sock) { try { sock.Connect(ep); if (sock.Connected) {
int bytesSent = sock.Send(SearchMSG08Byte("")); Console.WriteLine("Sent {0} bytes.", bytesSent); byte[] response = new byte[4]; int bytesRec = sock.Receive(response); int totalBytesRec = 0; if (4 == bytesRec) { int len = BitConverter.ToInt32(response, 0); response = new byte[len]; Console.WriteLine("Trying to get {0} bytes.", len); bytesRec = 0;
do { bytesRec = sock.Receive(response); totalBytesRec += bytesRec; string message = Encoding.ASCII.GetString(response, 0, bytesRec); Console.WriteLine("Data {0} ", message); parsingMsg(message);
} while (totalBytesRec < len && bytesRec > 0);
if (totalBytesRec != len) throw new Exception("The total bytes recieved from manager did not equal the expected bytes"); } else throw new Exception("Unable to get the response size from the manager");
Console.WriteLine("Received {0} bytes.", totalBytesRec); }
} catch (SocketException ex) { Console.WriteLine("{0} Error code: {1}.", ex.Message, ex.ErrorCode); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { sock.Shutdown(SocketShutdown.Both); sock.Close(); } } }
private void parsingMsg(string msg) {
if (msg.Length > 0) { char[] delimiterChars = { '\r', '\n' }; string[] s = msg.Split(delimiterChars); for (int i = 0; i <= s.Length - 1; i++) { if (s[i].Length > 2) { string sData = s[i].Substring(2, s[i].Length - 2); switch (s[i].Substring(0, 2)) {
case "MC": MC.Name = sData; break; case "VR": VR.Name = sData; break; case "MN": MN.Name = sData; break; case "ST": ST.Name = sData; break; } } } } listView1.Items.Add(new ListViewItem(new string[] { MC.Name, VR.Name, MN.Name })); }
private void button1_Click(object sender, EventArgs e) {
Start();
Sendbyte(SearchMSG08Byte(""));
}
private void button2_Click(object sender, EventArgs e) {
TCP08CON(textBox1.Text);
}
private void Form1_Load(object sender, EventArgs e) {
}
} } |