วันอังคารที่ 17 สิงหาคม พ.ศ. 2553

การใช้งาน C# Socket Helper Classes (ตอนที่ 4: การย้ายข้อมูลผ่านทางเครือข่าย )


:: การย้ายข้อมูลผ่านทางเครือข่าย ::
      ในส่วนนี้จะแสดงเทคนิคในการย้าย ข้อมูลไบนารี ชนิดต่างๆผ่านทางเครือข่าย เมื่อเราทำการโปรแกรมเกียวกับการสือสารส่งสำคัญที่จำเป็นต้องเข้าใจคือข้อมูลไบนารีนั้นเก็บอยู่บนอุปกรณ์อย่างไรการส่งข้อมูลผ่านเครือข่ายอย่างไร


การย้ายข้อมูลไบนารี 
     เมื่อเราใช้ใช้ TCP หรือ UDP ในการส่งไบนารีระหว่างอุปกรณ์ 2 ตัวผ่านทางเครือข่ายเป็นเรื่องที่ซับซ้อน มันมีความเป็นไปได้ที่จะเกิดความผิดพลาดได้จากหลายสาเหตุ

      บางทีปัญหาใหญ่ในการย้ายข้อมูลชนิดไบนารีคือการทำให้มันแสดงผลได้อย่างไรเพราะตัวแปรไบนารีของเครืองแต่ละเครื่องจะมีรูปแบบเป็นของตัวเองเราจึงต้องเข้าใจข้อมูลเหล่านั้นเป็นอุปกรณ์ๆไป
        ข้อมูลไบนารีต้องแปลงให้เป็น byte array จึงจะสามารถส่งได้ โดยใช้ send() หรือ SendTo() method ใน c# อาจจะใช้ BitConverter class

การส่งข้อมูลชนิดไบนารี
    methord ที่ชื่อว่า BitConverter และ GetBytes() จะแปลงข้อมูลไบนารีมาตราฐานเป็น byte array

ตัวอย่างเช่น
    int test = 1990;
    byte[] data = BitConverter.GetBytes(test);
    newsock.Send(data,0,data.Length);

คำเตือน ในการส่งข้อมูล ไบนารีไม่สามารถใช้ StreamWriter และ StreamReader ได้เพราะมันใช้ได้ดีกับสตริงแต่มันจะเกิดความเสียหายกับข้อมูลไบนารี  สิ่งสำคัญอีกอย่างเมื่อเราสร้าง byte array เราต้องทำการจองพื้นที่ให้เพียงพอกับข้อมูลไบนารีของเราไม่เช่นนั้นเมื่อส่งข้อมูลไปแล้วจะไม่สามารถใช้ข้อมูลดังกล่าวได้

การรับข้อมูลไบนารี
      โปรแกรมต้องทำการเปิดรับข้อมูลไบนารีแล้วทำการแปลงข้อมูลกลับเป็นข้อมูลแบบดังเดิมที่ส่งมา



การแปลงข้อมูลทุก method จะมีรูปแบบเหมือนกัน ดังนี้ :
ฺ    BitConverter.ToInt16(byte[] data,int offset)
  • พารามิเตอร์ตัวแรกคือ byte array ของข้อมูล
  • พารามิเตอร์ตัวที่ 2 คือ จุดที่จะเริ่มแปลงข้อมูล
    ในการรับข้อมูลที่มีการแปลงข้อมูลไบนารีเราต้องเขียนโปรแกรมให้แปลงข้อมูลกลับเป็นข้อมูลดังเดิมได้ดังตัวอย่างด้านล่าง

      double total = 0.0;
      byte[] data = newsock.Receive(ref sender);
      double test = BitConverter.ToDouble(data,0);
      total+=test;



ไม่มีความคิดเห็น:

แสดงความคิดเห็น