หน้าแรก
 การบ้าน
  C/C++ new
  Java new
  Windows Phone
  แจ้งเรื่องที่ต้องการ
 บทความ
  .NET
  Android
  Blackberry
  C++Builder
  Delphi
  Java
  Mobile
  Open Source
  Pocket PC
  Visual Basic
  Web
  Windows Phone
  Others
 แบบเรียนฟรี
  ASP
  ASP.NET Webmatrix
  C++
  eVB
  J2ME
  Java
  PHP
 ซอร์สโค้ด
  Android
  ASP
  C++
  VC++
  CGI-Perl
  Delphi
  Java
  jQuery
  PHP
  Visual Basic
  .NET
 บริการจากเรา
  เปิดท้าย... ขายโค้ด
  Freeware
  อัตราค่าโฆษณา
  รายชื่อลูกค้า
  สถิติผู้เข้าเว็บ
 ดาว์นโหลด
 ค้นหาข้อมูล
 กระดานสนทนา
  .NET
  C/C++
  Delphi
  Java
  Palm/PocketPC
  Visual Basic
  Web
  อื่นๆ
 กระดานงาน
 ลิงค์เว็บ
 เกี่ยวกับผม
 อัตราค่าโฆษณา
Social Network

Facebook  Twitter  YouTube
 New Article
 Webboard
 Freelanceboard
Freeware
โปรแกรมเบอร์ดี (BerDee)
โปรแกรมเบอร์ดี (Android)
เกมส์เป่ายิ้งฉุบ
เกมส์เป่ายิ้งฉุบ(Android)
WebcamMonitor
WebcamMonitor(Windows)
scSendMail
scSendMail(Windows)
MSN Caption
MSN Caption(Windows)
  Freelance comment
  ติดต่อสอบถามมาได้ตลอดนะ...
2015-07-29 13:35:58
  ถ้าผมต้องการเว็บที่พัฒน...
2015-01-18 15:33:54
  ถ้าผมต้องการเว็บที่พัฒน...
2015-01-18 15:32:51
  ติดต่อสอบถามเข้ามาได้นะ...
2014-01-06 12:47:38
  ถ้ายังหาคนสอนไม่ได้ ก็ลอ...
2013-07-06 01:04:37
  สนใจส่งขอบเขตมาคุยราคาก...
2013-03-24 18:54:20
  ถ้ายังไม่มีคนรับงานติดต...
2012-12-16 19:18:14
  สนใจคะ ติดต่อ 0905076277...
2012-11-12 11:07:46
  รับทำโปรเจ็คนักศึกษาหรื...
2012-10-29 03:10:46
  sukit_te34@hotmail.com...
2012-10-29 03:09:36
  Webboard comment
  เขียนโปรแกรมภาษาจาวา
1.โ...

2023-09-12 11:40:28
  ต้องลอง debug ดูเองครับ
ไล่...

2023-06-08 18:03:06
  ร้านค้าแห่งหนึ่ง จะต้องน...
2021-09-21 08:47:08
  จงเขียนโปรแกรมดำเนินการ...
2021-05-07 15:06:11
  จงเขียนโปรแกรมสำหรับคำน...
2021-03-09 14:21:45
  ขอดู...
2021-01-04 23:56:45
  ขอโค้ดเพื่อทำการเรียนกา...
2020-12-09 23:02:09
  แล้ว ?...
2020-12-09 10:56:34
  จ้า...
2020-10-18 16:53:21
  พอดีผมเหลื่อแค่ตัดสต๊อก...
2020-05-31 21:49:43
  Homework comment
  เขียนโปรแกรมเพื่อรับค่า...
2022-02-24 10:45:17
  จากโค้ดนี้อะครับ พอดีลอง...
2021-03-22 01:22:39
  จากโค้ดนี้อะครับ พอดีลอง...
2021-03-22 01:22:39
  โจทย์การบ้าน c++ เขียนรูปแ...
2020-04-06 11:01:33
  แบบนี้ขอเป็น ภาษา php หน่อย...
2019-09-18 14:36:34
  ผมไม่อยากให้คุณได้คะแนน...
2019-04-27 01:29:07
  อาจารย์เขาบอกแนวข้อสอบม...
2019-04-27 00:44:29
  ขอสอบถามการเขียน c++ ครับ เ...
2018-04-02 12:19:21
  โค้ดตัวอย่างศึกษาให้เข้...
2017-11-26 14:50:05
  คำนวณค่าน้ำโดยรับค่ามิเ...
2017-11-20 23:15:26
  Article comment
  เท่าที่อ่าน error คือพื้นที่...
2022-03-23 13:56:48
  เรียน สอบถามปัญหา กับ อ.คร...
2022-01-24 17:39:49
  ต้องการ ให้เขียน โปรแกรม ...
2019-12-09 11:39:58
  รับเขียน arx จาก vc++ 2017 ล็อคโปร...
2019-09-19 09:48:09
  ทำการ register ไฟล์ที่ชื่อ mswinsck.oc...
2019-09-17 14:05:56
  ใน vb 6 ไม่มี component winsock เลยค่ะ ส...
2019-09-03 10:31:02
  รบกวนขอสอบถามหน่อยนะครั...
2019-03-04 05:31:04
  สามารถนำตัวหนังสือจากภา...
2018-12-25 08:54:32
  มีcode ของ VB ไหมค่ะ ถ้ามีรบกว...
2017-09-28 16:50:02
  น่าจะได้ครับ ไม่เคยลอง
...

2017-07-11 09:59:35
  9Mcode comment

Link Exchange

อัตราค่าโฆษณา
 
การใช้งาน Winsock Control (อ่าน 37,388)
ศุภกิจ ทองดี (9'M) บทความโดย: นาย ศุภกิจ ทองดี (9'M)
e-mail: webmaster@sourcecode.in.th
mobile: 09-5009-5351
Line: suppakit.thongdee
Youtube: 9Mcode
Fanpage: Sourcecode.in.th
   

- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -

 
 
Freelanceรับพัฒนาโปรแกรม และเว็บ โดย 9'M 

คอนโทรลที่ชื่อว่า 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)

Protocol RFC Link
SMTP  821 http://www.faqs.org/rfcs/rfc821.html
POP3  1725 http://www.faqs.org/rfcs/rfc1725.html
NNTP 977 http://www.faqs.org/rfcs/rfc977.html
FTP  959 http://www.faqs.org/rfcs/rfc959.html
HTTP  2068 http://www.faqs.org/rfcs/rfc2068.html

โดยแต่ละโปรโตคอลจะมีลักษณะของคำสั่ง และ การตอบสนอง ที่เป็นของตัวเอง แต่ทะว่า ยังมีสวนที่เป็นพื้นฐาน ที่คุณควรทราบก่อนทำการพัฒนาโปรแกรม

  • คำสั่งที่ใช้จะเป็นแบบ case-insensitive (ตัวอักษรเล็ก หรือ ใหญ่ มีผลแตกต่างกัน)
  • บางคำสั่งจำเป็นจะต้องมีพารามิเตอร์ตามหลัง โดยมีช่องว่างขั้นกลางไว้
  • จะสิ้นสุดคำสั่งด้วยสัญลักษณ์ vbCrLf (มีค่าเท่ากับ Chr(13) และ Chr(10) รวมกัน)
  • เซิร์ฟเวอร์จะตอบสนองเป็น ตัวอักษรและตัวเลข ซึ่งขึ้นอยู่กับโปรแกรมที่จัดการที่อยู่บนเซิร์ฟเวอร์ โค้ดที่ตอบสนองกลับมานั้นจะมีตัวเลข 3 หลักนำหน้าคำสั่ง คุณสามารถใช้ฟังก์ชั่น Left ในการรับค่าของตัวเลข ดังตัวอย่าง:
    strResponseCode = Left$(strServerResponse, 3).

ส่วนในเรื่องของการตัดการติดต่อ ไคลเอนต์จะทำโดยการส่งคำสั่งไปยังเซิร์ฟเวอร์ (คำสั่ง QUIT จะเป็นคำสั่งที่ถูกใช้กันมาก) เซิร์ฟเวอร์จะส่งข้อความตอบกลับสุดท้าย แล้วจะตัดการติดต่อ วินซ็อกคอนโทรลจะแจ้งการตัดการติดต่อผ่านทางอีเวนต์ Close แต่มันไม่ได้เป็นอย่างนี้ทุกๆโปรโตคอล ตัวอย่างเช่น เซิร์ฟเวอร์ HTTP จะตัดการติดต่อทันทีหลังจากที่ได้ส่งข้อมูลให้ไคลเอนต์แล้ว

ข้อแนะนำสุดท้ายเกี่ยวกับเรื่องของข้อผิดพลาด (error) คือมันจะมีข้อผิดพลาดอยู่ 2 ประเภท ที่คุณจะพบในการใช้งานวินซ็อกคอนโทรล อันดับแรกคือ ผิดพลาดที่โปรโตคอลของโปรแกรม ที่ทำงานอยู่นั้น มันเกิดขึ้นจากการส่งคำสั่งที่ไม่ถูกต้อง หรือ ความผิดพลาดของคุณเอง โดยคุณจะทราบได้จากหมายเลขที่เซิร์ฟเวอร์ตอบกลับมาให้ อันดับสุดท้ายคือ ข้อผิดพลาดที่เกิดจากซ็อกเก็ตของวินโดวน์ (Winsock) ซึ่งวินซ็อกจะแจ้งการเกิดข้อผิดพลาด ผ่านทางอีเวนต์ Error ซึ่งภายในโค้ด จะมีการแจ้งรายละเอียดเล็กน้อย เกี่ยวกับข้อผิดพลาดที่เกิดขึ้น

 

- - - - - - - - - - - - - - ผู้ให้การสนับสนุน- - - - - - - - - - - - - -


128.199.238.125 ความคิดเห็น #55 (จาก IP: 128.199.238.125)
ผมส่งข้อความในวง LAN ได้เฉพาะคอมพิวเตอร์ที่เป็น PC ส่วน Notebook ส่งไม่ได้เป็นเพราะอะไรครับ ผมใช้ Winsock ส่งผ่าน IP Address ครับ ขอบคุณครับ
จากคุณ : ekalak / ekalak.p@kubota.com [2016-03-12 18:25:42]

49.0.71.146 ความคิดเห็น #56 (จาก IP: 49.0.71.146)
ต้องวิเคราะห์ครับ "ว่าจริงๆ ส่งไม่ได้ หรือ รับไม่ได้ หรือ รับได้แต่โดนบล๊อค หรือเปล่า"
ลองทดสอบดูว่า notebook มีอะไรต่างจาก pc
เช่น ต่อใน lan เดียวกันไหม๊
ต่อแล้วได้ ไอพี วงเดียวกันหรือเปล่า
notebook มีโปรแกรม antivirus หรือโปรแกรม firewall ป้องกัน หรือเปล่า(บางทีมัน block ไว้)

ให้ลอง ping , telnet ไปที่ ip และ port นั้นจากเครื่องอื่น ว่าทำได้หรือไม่
ถ้าไม่ได้ แปลว่าต้องมีปัญหาอะไรสักอย่าง

การตอบคุณจากข้อมูลน้อยนิด ตอบกว้างๆได้เท่านี้ ที่เหลือคุณต้องทดสอบ และทดลองหาคำตอบเองครับ
จากคุณ : maddog [2016-03-12 23:36:05]
สอบถาม
  • ห้ามการโฆษณา หากต้องการติดต่อหาลูกค้า ติดต่อโฆษณาโดยตรงได้ที่ webmaster@sourcecode.in.th
  • ห้ามใช้คำหยาบและคำพูดที่ไม่เหมาะสม
  • ขอสงวนสิทธิหากตรวจพบ ข้อความที่ไม่เหมาะสม ข้อความนั้นจะถูกลบทันที
ชื่อ
อีเมล์
รายละเอียด

 
 
คลิปสอนเขียนโปรแกรม
เรียนเขียนโปรแกรมดอทเน็ต
เรียนเขียนโปรแกรมแอนดรอยด์
เรียนเขียนโปรแกรมเบล็คเบอร์รี่
เรียนเขียนโปรแกรมซี ซีพลัสพลัส
เรียนเขียนโปรแกรมจาวา
เรียนการใช้งานลินุกส์
เรียนการเขียนโปรแกรมวินโดว์โฟน
เรียนการเขียนโปรแกรมพีเฮชพี มายเอสคิวเอล
อัตราค่าโฆษณา
 
บทความที่เกี่ยวข้อง

บันทึกภาพจาก WebCam

เขียนโปรแกรม visual basic 6 แสดงภาพจาก กล้อง WebCam ของคุณ

การ Ping หมายเลข IP

View Source ของเว็บด้วย Inet (Microsoft Internet Tranfer Control)

การเข้าถึงเอกสาร HTML ผ่านทาง WebBrowser Control

ส่ง Broadcast ข้อมูล ด้วย VB

Client/Server โดยใช้ UDP ผ่านทาง MS Winsock

โปรแกรม Daytime (ตัวอย่างการใช้ Winsock Control)

แสดงสถานะการดาวน์โหลดเว็บเพจ
Tutorial
eVB Tutorial
ASP.NET Webmatrix Tutorial
J2ME Tutorial
C++  Tutorial
Java  Tutorial
PHP Tutorial
ASP Tutorial
 
แบบสำรวจ

Home - Article - Tutorial - Sourcecode - Dev Handbook - Search - WebBoard - Links - About Us

สงวนลิขสิทธิ์ ห้ามคัดลอก ทำซ้ำ แก้ไข ดัดแปลง ไม่ว่าในรูปแบบใด โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์จากกระทรวงพาณิชย์: 7100503002000
Copyright 2001 SourceCode.in.th