คอนโทรลที่ชื่อว่า Winsock ที่มากับ
Visual Basic เป็นเครื่องมือที่มีประโยชน์ในการพัฒนา โปรแกรมบน Internet
ให้กับคุณ เมื่อเปรียบเทียบกับคอนโทรล ActiveX ตัวอื่นๆ Winsock จะเป็นคอนโทรลที่ถูกนำมาใช้งานมากคอนโทรลนึง
แต่อย่างไรก็ตามถ้าคุณต้องการที่จะคอนโทรลขึ้นมาเอง และไม่ต้องการที่จะใช้คอนโทรลของผู้พัฒนาคนอื่น
ซึ่งอาจมีข้อผิดพลาดที่คุณไม่ต้องการ คุณก็จำเป็นจะต้องมีพื้นฐานที่เกี่ยวกับ
network protocols และ หลักในการติดต่อสื่อสาร แค่นี้ คุณก็สามารถที่จะสร้างโปรแกรมบนอินเทอร์เน็ตได้ตามที่ต้องการ
เอาละครับ ต่อไปผมจะอธิบาย ถึงวิธีการใช้งาน Winsock control และ วิธีการใช้มันกับ
Internet protocols อื่นๆอาทิเช่น HTTP (WWW), FTP, NNTP (News), SMTP and
POP3 (Mail).
ต่อไปจะอธิบายถึงเรื่องของ Client (ไคลเอ็นต์) และ Server (เซิร์ฟเวอร์)
ไคลเอ็นต์จะเป็นเครื่องคอมพิวเตอร์ที่จะร้องขอบริการ หรือ ข้อมูล จากเครื่องเซิร์ฟเวอร์
โดยผ่านทางโปรแกรมต่างๆ เช่น Web Browser, Outlook Express, mIRC ซึ่งเครื่องเซิร์ฟเวอร์
จะเป็นเครื่องที่ให้บริการต่างๆแก่เครื่องที่เป็น Client เช่น Web Server,
Mail Server, IRC Server
โดยมากโปรแกรมบนอินเทอร์เน็ตจะถูกติดตั้งลงในเครื่องที่เป็นไคลเอ็นต์ ทำให้เครื่องที่เป็น
ไคลเอนต์ มีความสามารถในการ รับและส่ง อีเมล์, เปิดชมเว็บไซต์, ทำการติดต่อสื่อสารกับกลุ่มข่าว
(news groups) ต่าง และ สามารถโหลดไฟล์ที่ต้องการ.
ส่วนโปรแกรมอีกประเภทนึง จะต้องติดตั้งกับเครื่องที่เป็นเซิร์ฟเวอร์ โปรแกรมประเภทนี้จะให้บริการ
แก่ไคลเอนต์ ที่ร้องขอใช้บริการ เครื่องเซิร์ฟเวอร์สามารถที่จัดการกับเครื่องไคลเอนต์ได้หลายเครื่อง
และ พร้อมกันนั้นก็ยังสามารถจัดการกับงานต่างๆที่อยู่บนเครื่องไปพร้อมกัน
เพราะว่าเทคโนโลยี Socket (ซ็อกเก็ต) ที่มีใช้งานในปัจจุบันบนอินเทอร์เน็ตมีความเสถียรภาพ
Socket ที่มีการใช้งานอยู่บน MS Windows จะถูกเรียกว่า Windows Socket หรือจะเรียกสั้นๆว่า
Winsock(วินซ็อก) ความหมายของซ็อกเก็ต คือ เครื่องมือของโปรแกรมที่จะถูกใช้ในการในการส่ง
และ รับ ข้อมูลผ่านทางหมายเลขพอร์ทของ TCP/IP ที่กำหนด โปรแกรมจะสร้างซ็อกเก็ตได้ตามที่ต้องการเพื่อใช้ในการทำงาน
แต่ 1 ซ็อกเก็ต จะต้องทำงานกับ 1 พอร์ทของ TCP/IP เท่านั้น
โปรแกรมฝั่งไคล์เอนต์จะสร้างซ็อกเก็ตและทำการกำหนดหมายเลขพอร์ตโดยวิธีการสุ่มหมายเลขขึ้นมา
แต่ทางฝั่งเซิร์ฟเวอร์จะไม่เป็นอย่างนั้น โปรแกรมฝั่งเซิร์ฟเวอร์จะต้องทำตามข้อกำหนด
ที่ได้มีการกำหนดไว้ใน TCP/IP ports ซึ่งจะเป็นมาตรฐาน ตัวอย่าง: หมายเลข
TCP/IP port สำหรับ FTP server คือ 21, และ สำหรับ Web server คือ 80 มีข้อกำหนดที่ครอบคลุม
(global arrangement) สำหรับการเรียกใช้บริการ (services) โดยจะมีการกำหนดหมายเลขของพอร์ตที่ไคลเอ็นต์ควรที่จะส่งคำร้องขอบริการ
ดังตารางด้านล่าง
Protocol |
Port |
Description |
SMTP |
25 |
Simple Mail Transfer
Protocol |
POP3 |
110 |
Post Office Protocol |
NNTP |
119 |
Network News Transfer
Protocol |
FTP |
21 |
File Transfer Protocol |
HTTP |
80 |
Hyper Text Transfer
Protocol |
ไคลเอนต์จะเริ่มต้นสร้างการติดต่อผ่านเน็ตเวอร์ค(network
sessions) กับเซิร์ฟเวอร์ โดยผ่านทาง network protocols ตัวใดตัวนึง แล้วจะสร้างซ็อกเก็ต
และ กำหนดให้มันติดต่อไปยังเซิร์ฟเวอร์ที่ต้องการ เมื่อซ็อกเก็ตได้รับที่อยู่
(address) และ หมายเลขพอร์ต (Port) ของเซิร์ฟเวอร์แล้วมันก็จะติดต่อไปยังเซิร์ฟเวอร์นั้นทันที
ในส่วนของคอนโทรลที่ชื่อ วินซ็อกแล้ว คุณควรที่จะเรียกใช้เมธอด Connect เพื่อทำการติดต่อ
ดูคำสั่งด้านล่าง ซึ่งเป็นตัวอย่างของการติดต่อกับ FTP server.
Winsock1.Connect "ftp.microsoft.com",
21
จะเห็นได้ว่าเมธอดต้องการ 2 พารามิเตอร์
พารามิเตอร์แรกคือ ชื่อของเซิร์ฟเวอร์ที่เราต้องการติดต่อ ( remote server)
มันสามารถอยู่ในรูปแบบของชื่อ หรืออาจเป็น IP address ก็ได้ พารามิเตอร์อีกตัวคือ
หมายเลขพอร์ต ซึ่งเป็นตัวกำหนดชนิดของบริการที่เราต้องการร้องขอจากเซิร์ฟเวอร์
พอร์ตหมายเลข 21 จะเป็นพอร์ตที่รอการร้องขอที่จะเข้ามายัง FTP server. การรอการร้องขอ
(Listening) หมายถึง การที่โปรแกรมฝั่งเซิร์ฟเวอร์รอคอยการร้องขอบริการจากไคลเอ็นต์
ในกรณีที่ทำการติดต่อได้ สำเร็จ วินซ็อกคอนโทรล จะแจ้งให้เราทราบโดยเกิดเป็นเหตุการณ์
(อีเวนต์)ที่ชื่อ Connect event ตอนนี้การติดต่อที่เกิดขึ้นจะพร้อมสำหรับการส่ง
และ รับข้อมูล
เหตุการณ์ต่างๆต่อไปที่จะเกิดขึ้น ซึ่งขึ้นอยู่กับ network protocol ที่คุณกำลังใช้
- เซิร์ฟเวอร์รอคอยคำสั่งจากคุณ
- เมื่อ protocol (โปรโตคอล)ที่ใช้ตรงกัน
เซิร์ฟเวอร์จะส่งข้อมูลที่คุณต้องการ แล้วตัดการติดต่อ
- เซิร์ฟเวอร์จะส่งข้อความต้อนรับไปยังไคลเอนต์
ตามลักษณะของรูปแบบโปรโตคอลนั้นๆ (FTP, SMTP, POP3, NNTP) แล้วจะรอคอยคำสั่งจากคุณ
- เซิร์ฟเวอร์ส่งข้อความกลับสู่ไคลเอนต์
ซึ่งข้อความเกี่ยวกับความเป็นไปไม่ได้ที่จะรักษาการติดต่อต่อไป ตามลักษณะของรูปแบบโปรโตคอลนั้นๆ
(FTP, SMTP, POP3, NNTP)
ในช่วงเวลาติดต่อ เซิร์ฟเวอร์จะส่งข้อความตอบกลับ
ซึ่งเราสามารถที่จะ ตรวจสอบ และ จัดการกับข้อความที่ได้รับ ถ้าเมื่อวินซ็อกคอนโทรลเกิดอีเวนต์
DataArrival เราก็จะรับข้อมูลดังกล่าว โดยวางโด้ดต่อไปนี้ ไว้ในส่วนของอีเวนต์
Dim strData
As String
Winsock1.GetData strData
จากโค้ดข้างต้น จะเป็นการรับข้อมูลออกจากบัฟเฟอร์
แล้วนำไปเก็บไว้ในตัวแปลที่ชื่อ strData ซึ่งต่อไปคุณสามารถที่จะจัดการกับข้อมูลดังกล่าวตามที่คุณต้องการ
เอาละครับ เมื่อคุณได้ทำการติดต่อกับเซิร์ฟเวอร์แล้ว และคุณได้รับข้อมูลแรกจากเซิร์ฟเวอร์
ตอนนี้คุณก็พร้อมที่จะเริ่มต้นการติดต่อกับเซิร์ฟเวอร์ในลักษณะของคำสั่งและการตอบสนองของเซิร์ฟเวอร์
ตัวอย่างด้านล่าง จะแสดงถึงขั้นตอนการติดต่อกับ FTP server ของ Microsoft
Client: Tries to make connection
with ftp.microsoft.com (port 21)
Server: Accepts connection and sends first response to client
Server: 220 ftp Microsoft FTP Service (Version 3.0).
Client: USER anonymous
Server: 331 Anonymous access allowed, send identity (e-mail name) as password.
Client: PASS gdal@comset.net
Server: 230 Anonymous user logged in.
Client: CWD developr
Server: 250 CWD command successful.
วิธีการที่จะส่งข้อมูลไปยังเซิร์ฟเวอร์
คุณจะต้องใช้เมธอด SendData ในการส่ง ตัวอย่างต่อไปนี้คือ การส่งคำสั่งแรกของการติดต่อกับ
FTP server จากตัวอย่างข้างต้นที่คุณได้อ่านก่อนหน้านี้:
Winsock1.SendData "USER anonymous" & vbCrLf
ข้อกำหนดทั้งหมด กฎเกณฑ์ และรูปแบบ
ของคำสั่ง คุณสามารถหาได้ในเอกสาร RFC (request for commants)
โดยแต่ละโปรโตคอลจะมีลักษณะของคำสั่ง
และ การตอบสนอง ที่เป็นของตัวเอง แต่ทะว่า ยังมีสวนที่เป็นพื้นฐาน ที่คุณควรทราบก่อนทำการพัฒนาโปรแกรม
- คำสั่งที่ใช้จะเป็นแบบ case-insensitive
(ตัวอักษรเล็ก หรือ ใหญ่ มีผลแตกต่างกัน)
- บางคำสั่งจำเป็นจะต้องมีพารามิเตอร์ตามหลัง
โดยมีช่องว่างขั้นกลางไว้
- จะสิ้นสุดคำสั่งด้วยสัญลักษณ์ vbCrLf
(มีค่าเท่ากับ Chr(13) และ Chr(10) รวมกัน)
- เซิร์ฟเวอร์จะตอบสนองเป็น ตัวอักษรและตัวเลข
ซึ่งขึ้นอยู่กับโปรแกรมที่จัดการที่อยู่บนเซิร์ฟเวอร์ โค้ดที่ตอบสนองกลับมานั้นจะมีตัวเลข
3 หลักนำหน้าคำสั่ง คุณสามารถใช้ฟังก์ชั่น Left ในการรับค่าของตัวเลข ดังตัวอย่าง:
strResponseCode = Left$(strServerResponse, 3).
ส่วนในเรื่องของการตัดการติดต่อ ไคลเอนต์จะทำโดยการส่งคำสั่งไปยังเซิร์ฟเวอร์
(คำสั่ง QUIT จะเป็นคำสั่งที่ถูกใช้กันมาก) เซิร์ฟเวอร์จะส่งข้อความตอบกลับสุดท้าย
แล้วจะตัดการติดต่อ วินซ็อกคอนโทรลจะแจ้งการตัดการติดต่อผ่านทางอีเวนต์ Close
แต่มันไม่ได้เป็นอย่างนี้ทุกๆโปรโตคอล ตัวอย่างเช่น เซิร์ฟเวอร์ HTTP จะตัดการติดต่อทันทีหลังจากที่ได้ส่งข้อมูลให้ไคลเอนต์แล้ว
ข้อแนะนำสุดท้ายเกี่ยวกับเรื่องของข้อผิดพลาด (error) คือมันจะมีข้อผิดพลาดอยู่
2 ประเภท ที่คุณจะพบในการใช้งานวินซ็อกคอนโทรล อันดับแรกคือ ผิดพลาดที่โปรโตคอลของโปรแกรม
ที่ทำงานอยู่นั้น มันเกิดขึ้นจากการส่งคำสั่งที่ไม่ถูกต้อง หรือ ความผิดพลาดของคุณเอง
โดยคุณจะทราบได้จากหมายเลขที่เซิร์ฟเวอร์ตอบกลับมาให้ อันดับสุดท้ายคือ ข้อผิดพลาดที่เกิดจากซ็อกเก็ตของวินโดวน์
(Winsock) ซึ่งวินซ็อกจะแจ้งการเกิดข้อผิดพลาด ผ่านทางอีเวนต์ Error ซึ่งภายในโค้ด
จะมีการแจ้งรายละเอียดเล็กน้อย เกี่ยวกับข้อผิดพลาดที่เกิดขึ้น
|