บทที่ 6 โปรแกรมเรียกดูเอกสาร HTML ผ่าน Winsock
ตัวอย่างโปรแกรมนี้ จะเป็นการติดต่อขอข้อมูลจากเว็บไซด์ โดยทำการร้องขอ เอกสาร HTML จากเว็บไซด์ ให้จัดส่งข้อมูลมายังโปรแกรม ผ่านการติดต่อสื่อสาร ด้วยคอนโทรล Winsock ซึ่งในการใช้งานจริง จำเป็นที่เครื่อง Pocket PC ของคุณต้องมีการเชื่อมต่อกับ ระบบอินเตอร์เน็ต ผ่านทางรูปแบบต่างๆที่มีอยู่ในปัจจุบัน เช่น Wireless, Bluetooth, GPRS, EDGE หรือไม่กระทั่ง การเสียบกับอุปกรณ์ประเภท air card ต่างๆ
แต่สำหรับในตัวอย่างนี้ ผมจะแสดงในส่วนของการพัฒนาโปรแกรม บน Emulator และจะนำโปรแกรมสร้างเป็นตัวติดตั้ง (อ่าน การสร้างโปรแกรมติดตั้ง เพิ่มเติม) ไปทดสอบบนเครื่องจริง
ดาวน์โหลดโปรแกรม
ออกแบบหน้าตาโปรแกรม
- ทำการเปิดโปรแกรม eVB ผ่านทางเมนู Start->Programs->Microsoft eMbedded Tools->eMbedded Visual Basic 3.0
- คลิกเลือก File->New Project หรือกดปุ่ม Ctrl+N จะปรากฏหน้าต่าง ให้ทำการเลือก Windows CE for Pocket PC 2002 แล้วคลิกปุ่ม OK
รูปแสดง การเลือกสร้าง Project ใหม่
- ทำการวาง คอนโทรลต่างๆไว้ บนฟอร์ม ซึ่งประกอบด้วย Textbox 3 อัน และ CommandButton 1 อัน ดังรูป
รูปแสดง การวางคอนโทรลต่างๆไว้บนฟอร์ม
- คลิกเลือกที่คอนโทรลแต่ละตัว และทำการเปลี่ยนค่า Property ตามตารางด้านล่าง
Control |
Property |
Value |
CommandButton |
Name |
cmdRequest |
|
Caption |
Go |
TextBox1 |
Name |
txtURL |
|
Text |
www.sourcecode.in.th |
TextBox2 |
Name |
txtFile |
|
Text |
/ |
TextBox3 |
Name |
txtOutput |
|
Text |
|
|
ScrollBars |
2 - vbVertical |
- จะได้ผลการกำหนด Property ดังรูป
รูปแสดง ผลที่ได้จากการกำหนด Property ให้กับปุ่ม
เพิ่ม Winsock ข้าสู่โปรเจค
ในการเขียนโปรแกรมผ่านทางเครือข่าย จำเป็นจะต้องใช้คอนโทรลที่ชื่อ Winsock ในการติดต่อ ส่งผ่านข้อมูล ซึ่งจะถูกใช้ในการเขียนโปรแกรม ในลักษณะ Client/Server ซึ่งในตัวอย่างนี้ จะเป็นการนำเอา Winsock มาติดต่อไปยัง Web Server แล้วส่งคำสั่ง ร้องขอเอกสาร HTML ไปยัง Server พร้อมรับข้อมูลของ ไฟล์ HTML กลับมาแสดงผล ในช่อง TextBox
- ทำการคลิกเลือกที่ เมนู Project->Components...
- ทำการคลิกเลือก Microsoft CE WinSock Control 3.0
รูปแสดง การเลือกรายการของคอนโทรล winsock
- จากนั้นคลิกปุ่ม OK เพื่อยืนยัน
- จะปรากฏคอนโทรลใหม่ขึ้นมาบน Toolbars ดังรูป
รูปแสดง คอนโทรล Winsock บนทูลบาร์
- ทำการดับเบิ้ลคลิก คอนโทรล Winsock เพื่อวางไว้บน Form ดังรูป
รูปแสดง การเพิ่มคอนโทรล Winsock เข้าสู่ Form เพื่อใช้งาน
เริ่มต้นใส่โค้ดการทำงาน
- ทำการดับเบิ้ลคลิกปุ่ม cmdRequest ที่อยู่บนฟอร์ม จะปรากฏหน้าต่าง Code View
- ทำการป้อนโค้ด ตามตาราง
Private Sub cmdRequest_Click() Dim s On Error Resume Next WinSock1.Close WinSock1.RemoteHost = txtURL.Text WinSock1.RemotePort = 80 WinSock1.Connect txtOutput.Text = "" If Err.Number <> 0 Then MsgBox "Error:" & Err.Number & vbCrLf & Err.Description End If s = "GET " & txtFile.Text & " HTTP/1.0 " & vbCrLf & vbCrLf WinSock1.SendData s If Err.Number <> 0 Then MsgBox "Error:" & Err.Number & vbCrLf & Err.Description End If End Sub
|
จากโค้ดจะเป็นการประกาศตัวแปร s เพื่อใช้ในการเก็บคำสั่งที่จะส่งให้กับ Server จากนั้น ก็ใช้คำสั่ง On Error Resume Next เพื่อให้โปรแกรม ทำงานต่อได้ เมื่อมีความผิดพลาดเกิดขึ้น ถัดมาจะทำการตัดการติดต่อของ Winsock1 ที่มีอยู่ก่อนหน้าโดยใช้เมธอด Close และทำการกำหนด URL ของ Server ปลายทาง พร้อมหมายเลข Port 80 (80 เป็นหมายเลขพอร์ท ที่ใช้งานสำหรับ Web Server) แล้วทำการเชื่อมต่อไปยัง Server ด้วยเมธอด Connect
่ต่อมาจะทำการลบข้อความที่แสดงอยู่ในคอนโทรล txtOutput ออกไป แล้วตรวจสอบค่าของหมายเลขข้อผิดพลาดผ่านทาง Err.Number ว่ามีหรือไม่ ถ้ามีข้อผิดพลาดจะแสดงหน้าต่าง รายงานข้อผิดพลาดออกมาแสดง ขั้นตอนต่อมาจะทำการสร้างคำสั่งขึ้นมา โดยในคำสั่งจะเป็นการร้องขอไฟล์ ตามที่ได้กำหนดไว้ในคอนโทรล txtFile เมื่อพร้อมแล้วจะมีการสั่งคำสั่ง ไปยังเครื่อง Server โดยการใช้เมธอด SendData ผ่านทางคอนโทรล Winsock1 ที่มีการเชื่อมต่อกับ Server ไว้แล้ว สุดท้ายจะใช้คำสั่ง if เพื่อตรวจสอบข้อผิดพลาด หลังการส่งคำสั่ง อีกครั้ง
หลังจากการส่งคำสั่งไปยัง Server เป็นที่เรียบร้อยแล้ว ทางฝั่ง Server จะทำการตอบกลับมายัง Winsock1 ขั้นตอนต่อมา จะเป็นการรับข้อมูลที่ตอบกลับ มาแสดง โดยมีขั้นตอนดังนี้
- เปิดหน้าต่าง Code View และทำการเลือกรายการ และ ดังรูป
รูปแสดง การสร้าง sub ของ Winsock เพื่อรับข้อมูลที่ส่งเข้ามา
- ทำการป้อนโค้ด ตามตาราง เพื่อรับข้อมูลจาก Server มาแสดงในคอนโทรล txtOutput
Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long) Dim sRecieveDate On Error Resume Next WinSock1.GetData sRecieveDate If Err.Number <> 0 Then MsgBox "Error:" & Err.Number & vbCrLf & Err.Description Else txtOutput.Text = sRecieveDate WinSock1.Close End If End Sub
|
การทำงานของโค้ด จะเริ่มจากการประกาศตัวแปร ที่จะใช้เก็บข้อมูลที่ส่งมาจาก Server ดังจะเป็นได้ว่า เราจะไม่กำหนดประเภทของตัวแปร ให้กับตัวแปร sRecieveDate ก็เพื่อให้เป็นตัวแปรแบบ Variant ซึ่งจะสามารถรับค่าต่างๆ ได้มากกว่าตัวแปรแบบอื่น จากนั้นจะใช้เมธอด GetData ของคอนโทรล Winsock1 รับค่าที่ส่งมา เอาไปเก็บไว้ในตัวแปร sRecieveDate สุดท้ายก็ตรวจสอบข้อผิดพลาด หากไม่เกิดข้อผิดพลาด ก็จะทำการแสดงข้อมูลจากตัวแปร sRecieveDate ไว้ใน txtOutPut และสั่งปิดการติดต่อกับ Server ของ Winsock1 ผ่านทางเมธอด Close
ซึ่งในการทดสอบโปรแกรมคุณจะต้องทำการเชื่อมต่อ อินเตอร์เน็ตไว้ เพื่อให้สามารถติดต่อกับ Web Server โดยในที่นี้คือ www.sourcecode.in.th แต่ถ้าคุณไม่มีการเชื่อมต่อ อินเตอร์เน็ตอยู่ อาจสามารถทดสอบได้ผ่านทาง การติดตั้ง IIS (IIS หรือที่เรียกกันว่า Internet Information Server เป็น WebServer ของ Microsoft ที่ให้ version ทดลองมากับ Windows XP) หรือโปรแกรม Apache ซึ่งเป็นโปรแกรม Web Server ที่ได้ติดตั้งภายในเครื่องตนเอง และ ทำการเปลี่ยน ข้อความในช่องแรกเป็น localhost หรือ 127.0.0.1 และทำการคลิกปุ่ม Go เพื่อทดสอบ
- ทำการทดสอบโปรแกรม โดยกดปุ่ม F5 ให้คุณทดสอบคลิกปุ่ม Go
รูปแสดง การทดสอบการทำงานของโปรแกรม โดยคลิกปุ่ม Go
สำหรับท่านที่มีเครื่อง Pocket PC อาจทำการสร้างตัวติดตั้งโปรแกรมตามเนื้อหาในบท การสร้างโปรแกรมติดตั้ง เพื่อทำการทดสอบ การทำงานจริงของโปรแกรม และอย่าลืมที่จะตรวจสอบการคลิกเลือก Microsoft CE WinSock Control 3.0 ในกระบวนการสร้างโปรแกรมติดตั้ง ไม่เช่นนั้น โปรแกรมจะไม่สามารถทำงานได้อย่างถูกต้อง
ผมได้ทดสอบการทำงาน โดยได้ติดตั้งและทดสอบกับเครื่อง Pocket PC ของผมเอง จะได้ผลดังรูปครับ
รูปแสดง ผลการทำงานของโปรแกรม บนเครื่องจริง
|