Johnnie’sWinsockTutorial

แƒแƒ แƒ?แƒ’แƒ?แƒœแƒแƒšแƒฃแƒ แƒ? แƒ’แƒ•แƒ”แƒ แƒ“แƒ? http://johnnie.jerrata.com/winsocktutorial/

 

แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒœแƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ›แƒ?แƒ•แƒ?แƒ“แƒ แƒฉแƒ”แƒ›แƒ? Winsock tutorial, แƒ—แƒฅแƒ•แƒ”แƒœ, แƒกแƒแƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ“, แƒœแƒแƒžแƒแƒ•แƒœแƒ? แƒ?แƒ“แƒ”แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ? แƒ™แƒแƒ›แƒฃแƒœแƒ?แƒ™แƒแƒชแƒ?แƒ?แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ?แƒ— แƒ?แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ?, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ›แƒฎแƒ?แƒ‘แƒšแƒแƒ•แƒ? แƒžแƒ”แƒ แƒกแƒžแƒ”แƒฅแƒขแƒ?แƒ•แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ” แƒ›แƒแƒฅแƒ•แƒก. แƒแƒœ, แƒแƒšแƒ‘แƒแƒ—, แƒ•แƒ?แƒœแƒ›แƒ” แƒ?แƒžแƒแƒ•แƒ แƒžแƒ”แƒ แƒกแƒžแƒ”แƒฅแƒขแƒ?แƒ•แƒ แƒ—แƒแƒœแƒแƒ‘แƒ แƒแƒ“ แƒกแƒแƒ?แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ“แƒแƒ”แƒ•แƒแƒšแƒ แƒจแƒ”แƒ›แƒแƒขแƒแƒœแƒ แƒแƒ› แƒฎแƒ”แƒ“แƒ•แƒ?แƒก แƒ แƒ”แƒแƒšแƒแƒ‘แƒแƒ“. แƒแƒ แƒ?แƒ•แƒ” แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ?, Winsock แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒกแƒ”แƒ แƒ•แƒ?แƒกแƒ? แƒ“แƒ แƒแƒ› tutorial แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒแƒ— แƒ›แƒ?แƒกแƒแƒฆแƒฌแƒ”แƒ•แƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒ›แƒ?แƒ–แƒœแƒ”แƒ‘แƒ?แƒก แƒ™แƒแƒ›แƒ”แƒ แƒชแƒ?แƒฃแƒšแƒ? แƒกแƒแƒฌแƒแƒ แƒ›แƒ, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒ?แƒกแƒฌแƒแƒ•แƒšแƒแƒก แƒกแƒคแƒ”แƒ แƒแƒจแƒ? แƒฅแƒกแƒ”แƒšแƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ?แƒ แƒ”แƒ‘แƒ?แƒก แƒžแƒ?แƒ แƒแƒ“แƒ? แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ?แƒกแƒแƒ—แƒ•แƒ?แƒก, แƒแƒœ แƒ แƒแƒ›แƒ” แƒจแƒแƒ แƒ?แƒก.

แƒแƒฅ แƒแƒ แƒ?แƒก แƒ?แƒก, แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒแƒจแƒฃแƒฅแƒ”แƒ‘แƒก:

  • แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก แƒ‘แƒฃแƒ“แƒ”: แƒ’แƒ”แƒซแƒšแƒ”แƒ•แƒแƒ— แƒžแƒแƒขแƒแƒ แƒ แƒฏแƒแƒ แƒ? แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ?, แƒจแƒ”แƒ’แƒ•แƒ?แƒซแƒšแƒ?แƒ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒ›แƒแƒ—แƒ›แƒ?แƒœแƒ”แƒ‘แƒ?แƒ— แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ? แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ?? (แƒ“แƒ?แƒแƒฎ, แƒจแƒ”แƒ’แƒ•แƒ?แƒซแƒšแƒ?แƒ.)
  • แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ?แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ?: แƒ?แƒ›แƒ?แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ?แƒกแƒฌแƒ?แƒœแƒ”แƒ‘แƒ?แƒ—, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ?แƒ›แƒ” แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ—แƒ? แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ?, แƒจแƒ”แƒ’แƒ•แƒ?แƒซแƒšแƒ?แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ— แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ? แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”? (แƒ“แƒ?แƒแƒฎ, แƒจแƒ”แƒ’แƒ•แƒ?แƒซแƒšแƒ?แƒ.)
  • แƒฃแƒคแƒ แƒ แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ?แƒšแƒ”แƒ‘แƒ? แƒ“แƒ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ?: แƒ แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ? แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒ–แƒ”แƒ›แƒแƒ— แƒ“แƒ แƒ›แƒ?แƒฆแƒ›แƒ แƒแƒ› tutorial? แƒ›แƒ” แƒ›แƒแƒœแƒ?แƒจแƒœแƒ”แƒ— 3 แƒ แƒแƒ› แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ•แƒ?แƒœแƒแƒ แƒฉแƒฃแƒœแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœ แƒ“แƒแƒ™แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ?, แƒฎแƒแƒšแƒ (แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ›แƒแƒœแƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ? แƒฉแƒ”แƒ›แƒ? tutorial, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ :-).

แƒ›แƒ?แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ?แƒ›แƒ?แƒกแƒ, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ?แƒงแƒแƒก แƒ“แƒแƒ?แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ?, แƒ แƒแƒ› แƒ›แƒ?แƒแƒฆแƒฌแƒ?แƒแƒก, แƒ แƒแƒ› awe-แƒ?แƒœแƒกแƒžแƒ?แƒ แƒ?แƒ แƒ”แƒ‘แƒ?แƒ— แƒžแƒฃแƒœแƒฅแƒขแƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ—, แƒ แƒแƒช แƒ›แƒ?แƒกแƒ? แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ? แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ?, แƒฃแƒœแƒ“แƒ แƒ?แƒชแƒแƒ“แƒ”แƒก, แƒชแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ? แƒฃแƒ™แƒแƒœ แƒ™แƒแƒ“แƒ?. แƒชแƒ“แƒ?แƒšแƒแƒ‘แƒ”แƒœ, แƒ แƒแƒ—แƒ แƒ—แƒแƒ•แƒ?แƒ“แƒแƒœ แƒแƒ•แƒ?แƒชแƒ?แƒšแƒแƒ— แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ›แƒแƒœแƒ?แƒžแƒฃแƒšแƒ?แƒ แƒ”แƒ‘แƒ?แƒก แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ? แƒ™แƒแƒ“แƒ? แƒ•แƒแƒ แƒ?แƒแƒœแƒขแƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒฃแƒจแƒฃแƒแƒšแƒ แƒกแƒแƒญแƒ?แƒ แƒแƒ”แƒ‘แƒ”แƒ‘แƒก แƒ“แƒ แƒแƒ›แƒ?แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ?แƒ“แƒ”แƒœแƒขแƒ?แƒคแƒ?แƒชแƒ?แƒ แƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒ? แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ?แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒœแƒแƒฎแƒแƒ แƒชแƒ?แƒ”แƒšแƒแƒก, แƒ แƒแƒช, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ?. แƒ แƒแƒ› แƒกแƒแƒ™แƒ›แƒแƒ แƒ?แƒกแƒ?แƒ แƒฉแƒ”แƒ›แƒ? Zen, แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ? แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ-แƒจแƒ”แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ แƒ แƒฉแƒ”แƒ•แƒ แƒแƒฎแƒšแƒ; แƒ›แƒแƒ“แƒ?แƒ—, แƒœแƒฃ แƒ–แƒแƒ’แƒ?แƒ”แƒ แƒ—แƒ? แƒฅแƒกแƒ”แƒšแƒฃแƒ แƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ?แƒ แƒ”แƒ‘แƒ?แƒก…

Feel free to download แƒ›แƒ—แƒ”แƒšแƒ? แƒกแƒแƒ›แƒ”แƒฃแƒ แƒ•แƒ”แƒ แƒ™แƒแƒ“แƒ? แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒ?. แƒ’แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒ แƒแƒ?แƒ›แƒ” แƒ™แƒแƒ“แƒ? แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ?แƒšแƒ? แƒ”แƒก แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ?แƒšแƒ? แƒฃแƒœแƒ“แƒ แƒ?แƒงแƒแƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? Winsock แƒ‘แƒ?แƒ‘แƒšแƒ?แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ?, wsock32.lib แƒแƒœ แƒ แƒแƒ›แƒ” แƒแƒกแƒ”แƒ—แƒ?แƒ•แƒ” แƒ“แƒแƒกแƒแƒฎแƒ”แƒšแƒ“แƒ. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ?แƒกแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ?แƒ— แƒ™แƒแƒ“แƒ? แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ?แƒกแƒ”, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ?แƒœแƒ แƒกแƒแƒ›แƒ”แƒฃแƒ แƒ•แƒ”แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? IDE (Dev-C++, Microsoft VC++, C++ Builder, แƒ“แƒ แƒ. แƒจ.), แƒแƒ?แƒ แƒฉแƒ?แƒ”แƒ— แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ Windows แƒžแƒ แƒแƒ”แƒฅแƒขแƒ? WinMain() , แƒ แƒแƒ—แƒ แƒ—แƒแƒ•แƒ?แƒ“แƒแƒœ แƒแƒ•แƒ?แƒชแƒ?แƒšแƒแƒ— แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ?.

แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก Socket

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ? แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ”แƒ— แƒ›แƒแƒœแƒฅแƒแƒœแƒ”แƒ‘แƒ? แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒœ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ?. แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ? แƒ›แƒแƒฃแƒกแƒ›แƒ?แƒœแƒ”แƒ— แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒ?แƒœแƒ?แƒชแƒ?แƒแƒšแƒ?แƒ–แƒแƒชแƒ?แƒ?แƒกแƒแƒก แƒ”แƒ แƒ—แƒ? แƒแƒœ แƒ›แƒ”แƒขแƒ? แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ? แƒฃแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ“แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ? แƒแƒกแƒ”แƒ—แƒ? แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ?แƒฆแƒ”แƒ‘แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ?แƒœแƒ”แƒ‘แƒ, Winsock, แƒแƒ“แƒแƒกแƒขแƒฃแƒ แƒ”แƒ‘แƒก แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ?, แƒ“แƒ แƒ?แƒฌแƒงแƒ”แƒ‘แƒ แƒ“แƒ?แƒกแƒžแƒ”แƒขแƒฉแƒ”แƒ แƒ?แƒ–แƒแƒชแƒ?แƒ?แƒก แƒ“แƒ แƒฉแƒแƒญแƒ แƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ?แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ? แƒ“แƒ แƒแƒฎแƒแƒšแƒ? แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ?. แƒแƒšแƒ‘แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒแƒ แƒขแƒ?แƒ•แƒ? แƒ›แƒ”แƒ—แƒแƒ“แƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ? แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ? แƒ›แƒ แƒแƒ•แƒแƒšแƒฏแƒ”แƒ แƒแƒ“แƒ? แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒแƒ แƒ?แƒก spawn แƒแƒฎแƒแƒšแƒ? แƒ—แƒ”แƒ›แƒ แƒ—แƒ?แƒ—แƒแƒ”แƒฃแƒš แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ?แƒ—. แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ›แƒแƒ“แƒ”แƒšแƒ? แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒฎแƒจแƒ?แƒ แƒแƒ“ แƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒžแƒแƒฃแƒ–แƒ?แƒก แƒ“แƒ แƒแƒ”แƒ‘แƒ?แƒ— แƒ“แƒแƒ•แƒ”แƒšแƒแƒ“แƒแƒ— แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ? แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?แƒก, แƒแƒฎแƒแƒšแƒ? แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ?, แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ?. แƒžแƒ?แƒ แƒ•แƒ”แƒš แƒ แƒ?แƒ’แƒจแƒ?, แƒ›แƒแƒ“แƒ?แƒ— แƒ?แƒ“แƒ”แƒœแƒขแƒ?แƒคแƒ?แƒชแƒ?แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ? แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ?แƒก แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ?แƒœแƒ?แƒชแƒ?แƒแƒšแƒ?แƒ–แƒแƒชแƒ?แƒ แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ แƒ‘แƒฃแƒ“แƒ”:

  • WSADATA: แƒ”แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ แƒแƒ แƒ?แƒก แƒ›แƒ”แƒแƒ แƒแƒ“แƒ?, แƒ แƒแƒ› แƒจแƒ”แƒ™แƒ?แƒ—แƒฎแƒ•แƒ?แƒก แƒแƒžแƒ”แƒ แƒแƒชแƒ?แƒฃแƒšแƒ? แƒกแƒ?แƒกแƒขแƒ”แƒ›แƒ?แƒก แƒ?แƒก แƒ•แƒ”แƒ แƒกแƒ?แƒ, Winsock แƒฉแƒ•แƒ”แƒœแƒ? แƒ™แƒแƒ“แƒ? แƒ›แƒแƒ?แƒ—แƒฎแƒแƒ•แƒก. แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒก WSAStartup() แƒ•แƒ แƒ—แƒแƒ• แƒกแƒฌแƒแƒ แƒ? Winsock DLL.
  • SOCKET: แƒแƒ‘แƒ?แƒ”แƒฅแƒขแƒ? (แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ?แƒ•แƒแƒ“, แƒ”แƒก แƒ’แƒแƒœแƒ?แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช u_int, unsigned integer, winsock.h—แƒ™แƒแƒ แƒ’แƒ?, แƒ•แƒ?แƒชแƒ?, smalltalk แƒžแƒแƒ แƒขแƒ?แƒ”แƒ‘แƒ?แƒก) แƒ›แƒ?แƒ”แƒ  แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ? แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ socket แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ?.
  • SOCKADDR_IN: แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒแƒ› แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒแƒก แƒฃแƒœแƒ“แƒ แƒ›แƒ?แƒฃแƒ—แƒ?แƒ—แƒแƒ—, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  socket แƒฃแƒœแƒ“แƒ แƒ?แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒแƒœ. SOCKADDR_IN แƒจแƒ”แƒ?แƒชแƒแƒ•แƒก แƒกแƒคแƒ”แƒ แƒแƒ”แƒ‘แƒจแƒ? IP แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?แƒก แƒ“แƒ แƒžแƒแƒ แƒขแƒ?แƒก แƒœแƒแƒ›แƒ”แƒ แƒ?:
struct sockaddr_in

{

 แƒ›แƒแƒ™แƒšแƒ” sin_family; // แƒแƒฅแƒ›แƒ? แƒขแƒ?แƒžแƒ?

 u_short sin_port; // แƒžแƒแƒ แƒขแƒ?แƒก แƒœแƒแƒ›แƒ”แƒ แƒ? socket

 struct in_addr sin_addr; // IP แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?

 char sin_zero[8]; // แƒ’แƒแƒ›แƒแƒฃแƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ?

};

แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ? แƒกแƒแƒ•แƒ”แƒšแƒ” แƒแƒฅแƒ›แƒ? แƒขแƒ?แƒžแƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช, แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ?, AF_INET (TCP/IP). แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก socket แƒแƒ  แƒแƒ แƒ?แƒก แƒ“แƒแƒ?แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ?, แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒ›แƒแƒœแƒฅแƒแƒœแƒ, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ?แƒช แƒ?แƒก แƒชแƒฎแƒแƒ•แƒ แƒแƒ‘แƒก, Winsock แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒœแƒ?แƒญแƒ”แƒ‘แƒก IP แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?แƒก แƒ“แƒ แƒžแƒแƒ แƒขแƒ?แƒก แƒœแƒแƒ›แƒ”แƒ แƒ? แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ” แƒจแƒ”แƒฅแƒ›แƒœแƒ.

แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ? แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ? แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ–แƒ”แƒ›แƒแƒ— แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒ? แƒ“แƒ แƒžแƒแƒขแƒแƒ แƒ แƒแƒ แƒ›แƒ?แƒ แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ?:

#include <windows.h>

#include <winsock.h>

#include <stdio.h>



#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก NETWORK_ERROR -1

#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก NETWORK_OK 0



แƒ‘แƒแƒ—แƒ?แƒšแƒแƒ“ ReportError(int, const char *);





int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nShow)

{

 แƒกแƒ?แƒขแƒงแƒ•แƒ sockVersion;

 WSADATA wsaData;

 int nret;



 sockVersion = MAKEWORD(1, 1); // แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ?แƒœแƒ“แƒ, Winsock แƒ•แƒ”แƒ แƒกแƒ?แƒ 1.1





 // แƒฉแƒ•แƒ”แƒœ แƒ•แƒ?แƒฌแƒงแƒ”แƒ‘แƒ— แƒ?แƒœแƒ?แƒชแƒ?แƒแƒšแƒ?แƒ–แƒแƒชแƒ?แƒ?แƒกแƒแƒก Winsock

 WSAStartup(sockVersion, แƒ“แƒ wsaData);





 // แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ?, แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก socket

 SOCKET listeningSocket;



 listeningSocket = socket(AF_INET, // แƒฌแƒแƒ•แƒ?แƒ“แƒ”แƒ— แƒ›แƒ”แƒขแƒ? TCP/IP

 SOCK_STREAM,  // แƒ”แƒก แƒแƒ แƒ?แƒก stream-แƒแƒ แƒ?แƒ”แƒœแƒขแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? socket

 IPPROTO_TCP); // แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒแƒ— TCP แƒ•แƒ?แƒ“แƒ แƒ” UDP



 แƒ—แƒฃ (listeningSocket == INVALID_SOCKET)

{

 nret = WSAGetLastError(); // Get แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ

 ReportError(nret, "socket()"); // แƒแƒœแƒ’แƒแƒ แƒ?แƒจแƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒฉแƒ•แƒ”แƒœแƒ? แƒกแƒแƒ‘แƒแƒŸแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ



 WSACleanup(); // แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ Winsock

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR; // แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒฆแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ

}





 // แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒแƒ— SOCKADDR_IN struct แƒจแƒ”แƒแƒ•แƒกแƒแƒ— แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ

 SOCKADDR_IN serverInfo;



 serverInfo.sin_family = AF_INET;

 serverInfo.sin_addr.s_addr = INADDR_ANY; // แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒ”แƒก แƒกแƒแƒ™แƒ”แƒขแƒ? แƒแƒ แƒ?แƒก แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ?แƒก แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ?,

  // แƒœแƒ”แƒ‘แƒ?แƒกแƒ›แƒ?แƒ”แƒ แƒ? แƒแƒ“แƒ’แƒ?แƒšแƒแƒ‘แƒ แƒ?แƒ•แƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก

 serverInfo.sin_port = htons(8888); // แƒ’แƒแƒ“แƒแƒ?แƒงแƒ•แƒแƒœแƒแƒ— แƒ แƒ?แƒชแƒฎแƒ•แƒ? 8888 แƒฅแƒกแƒ”แƒšแƒจแƒ?-byte แƒ›แƒ?แƒ–แƒœแƒ?แƒ—

 // แƒ“แƒ แƒฉแƒแƒ“แƒ”แƒ— แƒžแƒแƒ แƒขแƒ? แƒกแƒคแƒ”แƒ แƒแƒจแƒ?





 // แƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒแƒ socket แƒฉแƒ•แƒ”แƒœแƒ? แƒแƒ“แƒ’แƒ?แƒšแƒแƒ‘แƒ แƒ?แƒ•แƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ?แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?

 nret = แƒกแƒแƒ•แƒแƒšแƒ“แƒ”แƒ‘แƒฃแƒšแƒแƒ(listeningSocket, (LPSOCKADDR) แƒ“แƒ serverInfo, sizeof(struct sockaddr));



 แƒ—แƒฃ (nret == SOCKET_ERROR)

{

 nret = WSAGetLastError();

 ReportError(nret, "bind()");



WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}





 / / , แƒ แƒแƒ—แƒ socket แƒ›แƒแƒฃแƒกแƒ›แƒ?แƒœแƒ”แƒ—

 nret = แƒ›แƒแƒฃแƒกแƒ›แƒ?แƒœแƒ”แƒ—(listeningSocket, 10); // Up to 10 แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ? แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ•แƒ”แƒšแƒแƒ“แƒแƒ— แƒœแƒ”แƒ‘แƒ?แƒกแƒ›แƒ?แƒ”แƒ 

 // แƒ”แƒ แƒ—แƒ? แƒ“แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒ?แƒ?แƒฆแƒแƒก()'แƒ”แƒ“



 แƒ—แƒฃ (nret ==SOCKET_ERROR)

{

 nret = WSAGetLastError();

 ReportError(nret, "listen()");



WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}





 // แƒ“แƒแƒ•แƒ”แƒšแƒแƒ“แƒแƒ— แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ?

 SOCKET theClient;



 theClient = แƒ›แƒ?แƒ?แƒฆแƒแƒก(listeningSocket,

 NULL, // แƒแƒ แƒแƒแƒฃแƒชแƒ?แƒšแƒ”แƒ‘แƒ”แƒšแƒ?, แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? SOCKADDR_IN struct

 NULL); // แƒแƒ แƒแƒแƒฃแƒชแƒ?แƒšแƒ”แƒ‘แƒ”แƒšแƒ?, แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒชแƒ•แƒšแƒแƒ“แƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒจแƒ”แƒ?แƒชแƒแƒ•แƒก

 // sizeof ( struct SOCKADDR_IN )



 แƒ—แƒฃ (theClient == INVALID_SOCKET)

{

 nret = WSAGetLastError();

 ReportError(nret, "แƒ›แƒ?แƒ?แƒฆแƒแƒก()");



WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}





 // แƒ’แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ“แƒ แƒ›แƒ?แƒ?แƒฆแƒแƒ— แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒก แƒ“แƒ แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“,

closesocket(theClient);

closesocket(listeningSocket);





 // แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ Winsock

WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_OK;

}





แƒ‘แƒแƒ—แƒ?แƒšแƒแƒ“ ReportError(int errorCode, const char *whichFunc)

{

 char errorMsg[92]; // แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒœ, แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ? แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ•แƒก

 // แƒ’แƒ”แƒœแƒ”แƒ แƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ



 ZeroMemory(errorMsg, 92); // แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ NULL-แƒจแƒ”แƒฌแƒงแƒ•แƒ?แƒขแƒแƒก string



 // แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ? แƒฎแƒแƒ–แƒ? แƒแƒกแƒšแƒ”แƒ‘แƒ? แƒคแƒ แƒแƒ–แƒ, whichFunc string, แƒ“แƒ แƒ แƒ?แƒชแƒฎแƒ•แƒ? errorCode แƒจแƒ”แƒ•แƒ?แƒ“แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?

 sprintf(errorMsg, "แƒ–แƒแƒ แƒ? %s แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ %d!", (char *)whichFunc, errorCode);



 MessageBox(NULL, errorMsg, "socketIndication", MB_OK);

}

แƒ”แƒ แƒ—แƒ? แƒ แƒแƒ›, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒแƒจแƒ?แƒœแƒ•แƒ” แƒจแƒ”แƒแƒ›แƒฉแƒœแƒ”แƒ•แƒ— แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒ™แƒแƒ“แƒ? แƒแƒ แƒ?แƒก แƒ—แƒแƒœแƒฎแƒ?แƒก แƒซแƒแƒšแƒ?แƒกแƒฎแƒ›แƒ”แƒ•แƒ แƒจแƒ”แƒ•แƒ?แƒ“แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ?แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒฎแƒ“แƒ”แƒ‘แƒ, แƒ™แƒแƒ“แƒ? แƒ?แƒซแƒ”แƒœแƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ?แƒก แƒ™แƒแƒ“แƒ? แƒ”แƒ แƒ—แƒแƒ“ WSAGetLastError() แƒ“แƒ แƒ›แƒแƒฆแƒแƒ–แƒ?แƒ”แƒ‘แƒ? แƒจแƒ”แƒ“แƒ”แƒ’แƒ? nret. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ™แƒแƒ“แƒ? แƒแƒ แƒ?แƒก แƒ›แƒแƒจแƒ?แƒœ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒšแƒ? แƒ”แƒ แƒ—แƒแƒ“ แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?แƒแƒœแƒ? แƒ›แƒ?แƒฃแƒ—แƒ?แƒ—แƒ”แƒ‘แƒก, แƒกแƒแƒฎแƒ”แƒšแƒ? แƒ•แƒ”แƒ  แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒกแƒแƒ‘แƒแƒŸแƒ แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒกแƒแƒฎแƒ”แƒšแƒแƒ“ ReportError(). แƒ?แƒฅ, แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒแƒ แƒ?แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ? แƒ“แƒ แƒแƒฉแƒ•แƒ”แƒœแƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒ–แƒแƒ แƒ? MessageBox(), แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒแƒ แƒ?แƒก แƒœแƒแƒฌแƒ?แƒšแƒ? แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒ? WinAPI. แƒ›แƒแƒ’แƒแƒšแƒ?แƒ—แƒแƒ“, แƒฐแƒฅแƒแƒœแƒ“แƒ แƒ›แƒแƒฃแƒกแƒ›แƒ?แƒœแƒ”แƒ—() แƒ•แƒ”แƒ  แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ™แƒแƒ“แƒ? 10093 (แƒ’แƒแƒœแƒ?แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช WSANOTINITIALISED), แƒ›แƒ–แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ string แƒ?แƒฅแƒœแƒ”แƒ‘แƒ “แƒ–แƒแƒ แƒ?แƒก แƒ›แƒแƒกแƒแƒกแƒ›แƒ”แƒœแƒแƒ“() แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ 10093!”. แƒ—แƒฅแƒ•แƒ”แƒœ, แƒ’แƒแƒœแƒ?แƒ•แƒ แƒฃแƒšแƒ? แƒจแƒ”แƒ›แƒฅแƒ›แƒœแƒ”แƒšแƒ?, แƒ›แƒแƒจแƒ?แƒœ แƒ”แƒซแƒ”แƒ‘แƒแƒ— แƒ™แƒแƒ“แƒ? แƒ“แƒ แƒแƒฆแƒ›แƒแƒแƒฉแƒ”แƒœแƒ—, แƒ แƒแƒ› แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ›แƒแƒฎแƒ“แƒ แƒ?แƒ›แƒ?แƒขแƒแƒ›, แƒ แƒแƒ› แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ? แƒ–แƒแƒ แƒ? WSAStartup() แƒฏแƒ”แƒ  แƒ™แƒ?แƒ“แƒ”แƒ• แƒแƒ  แƒงแƒแƒคแƒ?แƒšแƒ.

Aleksandar แƒžแƒแƒ•แƒšแƒแƒ•แƒ?แƒก แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ•แƒ“แƒ แƒ”แƒก ReportError() แƒ›แƒแƒ?แƒชแƒแƒ•แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ?แƒšแƒแƒ‘แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ?แƒ— แƒแƒ—แƒ”แƒฃแƒšแƒ? แƒ’แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ? socket แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ?. แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ?แƒ— แƒ›แƒ?แƒกแƒ? แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒฃแƒšแƒ? แƒ•แƒ”แƒ แƒกแƒ?แƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒฆแƒแƒ  แƒฃแƒœแƒ“แƒ แƒกแƒแƒซแƒ?แƒ”แƒ‘แƒ”แƒšแƒ? แƒ แƒ แƒ™แƒแƒ“แƒ? แƒ?แƒ›แƒแƒก แƒœแƒ?แƒจแƒœแƒแƒ•แƒก, แƒ“แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ?แƒ— แƒฎแƒ“แƒ”แƒ‘แƒ แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ? แƒซแƒแƒšแƒ?แƒแƒœ แƒชแƒแƒขแƒ แƒซแƒแƒšแƒ?แƒกแƒฎแƒ›แƒ”แƒ•แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒ›แƒฎแƒ แƒ?แƒ“แƒแƒœ.

แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒ?แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒ?แƒงแƒ?แƒ“แƒ”แƒ‘แƒ NETWORK_ERROR แƒ“แƒ NETWORK_OK. แƒ”แƒก แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ?แƒงแƒแƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ?แƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ แƒแƒ แƒช แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ?. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ? แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ”แƒ แƒ—แƒ? แƒแƒ› แƒฆแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ?แƒก แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ–แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒก แƒ›แƒแƒ แƒขแƒ?แƒ•แƒ? แƒ—แƒแƒœแƒแƒกแƒฌแƒแƒ แƒแƒ‘แƒ?แƒก แƒขแƒ”แƒกแƒขแƒ? แƒ’แƒแƒ›แƒแƒแƒ•แƒšแƒ?แƒœแƒแƒก แƒœแƒ”แƒ‘แƒ?แƒกแƒ›แƒ?แƒ”แƒ แƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ?: แƒ—แƒฃ (myNetworkingFunction() == NETWORK_ERROR) {…}. แƒœแƒแƒ›แƒ แƒ”แƒ‘แƒ–แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ?แƒ?แƒฆแƒแƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒ™แƒแƒ“แƒ? WSAGetLastError() แƒ“แƒ handle แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ?แƒกแƒแƒ“. แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒฏแƒแƒ›แƒจแƒ?, แƒแƒฎแƒแƒ แƒชแƒ?แƒ”แƒšแƒ”แƒ‘แƒก แƒ™แƒแƒ แƒ’แƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ’แƒแƒขแƒแƒ แƒ”แƒ‘แƒ แƒกแƒฅแƒ”แƒ›แƒ แƒแƒฎแƒšแƒ แƒ“แƒแƒ’แƒ?แƒ–แƒแƒ’แƒแƒ•แƒ— แƒ—แƒฅแƒ•แƒ”แƒœ แƒ‘แƒ”แƒ•แƒ แƒ? แƒ“แƒฆแƒ?แƒก แƒแƒœ แƒ™แƒ•แƒ?แƒ แƒ?แƒก แƒ’แƒแƒœแƒ•แƒ?แƒ—แƒแƒ แƒ”แƒ‘แƒ?แƒก แƒ“แƒ แƒแƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒงแƒ?แƒกแƒ?แƒ”แƒ แƒแƒ“ แƒ•แƒ?แƒชแƒ? แƒ แƒแƒขแƒแƒ›, แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ•แƒ”แƒ  แƒจแƒ”แƒซแƒšแƒ.

แƒ’แƒแƒ แƒ“แƒ แƒ?แƒ›แƒ?แƒกแƒ, แƒ แƒแƒ› แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ?แƒก แƒแƒฎแƒแƒšแƒ? แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ? แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ?, แƒ›แƒ?แƒ?แƒฆแƒแƒก() แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒแƒ›แƒแƒœแƒแƒฌแƒ”แƒ แƒ? แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ?แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ•แƒ?แƒ“แƒ แƒ” แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ?แƒ— แƒ›แƒ”แƒ—แƒแƒ“แƒ”แƒ‘แƒ? แƒ›แƒแƒ?แƒ—แƒฎแƒแƒ•แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ—แƒ? แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒ–แƒแƒ แƒ”แƒ‘แƒ? แƒแƒœ แƒ“แƒ แƒ (แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒก แƒกแƒแƒ™แƒ?แƒ—แƒฎแƒ? แƒแƒ› แƒ—แƒแƒ›แƒแƒจแƒ?แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ?, แƒกแƒแƒ“แƒแƒช แƒกแƒ?แƒฉแƒฅแƒแƒ แƒ” แƒ›แƒ?แƒ?แƒฆแƒแƒก loop แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ?แƒ— แƒ™แƒ แƒ?แƒขแƒ?แƒ™แƒฃแƒšแƒ?). แƒ?แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒก แƒแƒ› แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒแƒœแƒ?แƒ แƒ”แƒ‘แƒ, แƒ’แƒแƒ?แƒ•แƒšแƒ?แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? sockaddr_in struct แƒ แƒแƒšแƒ”แƒ‘แƒจแƒ? แƒ แƒแƒ—แƒ sockaddr แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ?, แƒแƒœแƒฃ (LPSOCKADDR) แƒ“แƒ aSockaddrInStructure. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ?แƒกแƒ, แƒ’แƒแƒœแƒ•แƒแƒชแƒฎแƒแƒ“แƒ, แƒ›แƒ—แƒ”แƒšแƒ? แƒชแƒ•แƒšแƒแƒ“แƒ?, แƒ›แƒ?แƒ—แƒ?แƒ—แƒ”แƒ‘แƒฃแƒšแƒ? แƒฆแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ int, แƒ แƒแƒ› sizeof, แƒ แƒแƒ› sockaddr struct, แƒ“แƒ แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒ แƒ?แƒชแƒฎแƒ•แƒ?, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ?. แƒ—แƒฃ แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?, แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ แƒฃแƒœแƒ“แƒ แƒ?แƒงแƒแƒก แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ แƒแƒช แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒ–แƒแƒ แƒ?, แƒกแƒ?แƒ’แƒ แƒซแƒ?แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ? แƒฃแƒœแƒ“แƒ แƒ?แƒงแƒแƒก.

jdarnold แƒ’แƒ•แƒแƒคแƒ แƒ—แƒฎแƒ?แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒแƒ  แƒ›แƒฏแƒ”แƒ แƒ MSDN แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ?แƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ?แƒ?แƒก แƒ”แƒก แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ?: “MSDN docs แƒ’แƒฃแƒšแƒ?แƒกแƒฎแƒ›แƒแƒ‘แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ?แƒแƒ แƒแƒก addrlen, แƒ แƒแƒ› แƒ”แƒก แƒแƒ แƒ?แƒก แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ? แƒกแƒฃแƒ แƒ•แƒ?แƒšแƒ?แƒกแƒแƒ›แƒ”แƒ‘แƒ  แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ? แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ?, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ?แƒกแƒ?แƒœแƒ? แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ?แƒ. แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ? แƒ?แƒก แƒแƒ›แƒ‘แƒแƒ‘แƒก, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ? แƒ‘แƒแƒ?แƒขแƒ? แƒแƒ แƒ?แƒแƒœ sockaddr buffer, แƒ“แƒ แƒ’แƒแƒ›แƒแƒ•แƒแƒšแƒ? [Winsock] แƒแƒ•แƒกแƒ”แƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ? [Winsock] แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ?. แƒ—แƒฃ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒ?แƒ•แƒšแƒ?แƒก แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ? แƒ แƒแƒ’แƒแƒ แƒช len, [Winsock] แƒแƒ  แƒจแƒ”แƒ”แƒฎแƒแƒ— buffer.”

แƒ”แƒก แƒแƒ  แƒแƒ แƒ?แƒก แƒ‘แƒ”แƒ•แƒ แƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ?, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒก แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ? แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ?แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ”แƒ’แƒ แƒ”แƒ•แƒ” แƒ?แƒ แƒ—แƒ•แƒ”แƒ‘แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ แƒ?แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒซแƒ?แƒ แƒ?แƒ—แƒแƒ“แƒ? แƒ“แƒ?แƒ–แƒแƒ?แƒœแƒ?. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒ•แƒ แƒ แƒแƒ›, แƒ–แƒแƒ แƒ? WSAStartup() แƒ›แƒแƒงแƒ•แƒ”แƒ‘แƒ แƒกแƒ?แƒขแƒงแƒ•แƒ แƒ›แƒ?แƒฃแƒ—แƒ?แƒ—แƒ”แƒ‘แƒก, แƒ—แƒฃ แƒ แƒ แƒ•แƒ”แƒ แƒกแƒ?แƒ แƒ’แƒกแƒฃแƒ แƒ— แƒฉแƒแƒขแƒ•แƒ?แƒ แƒ—แƒ•แƒ (แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? แƒ”แƒก แƒแƒ แƒ?แƒก 1.1) แƒ“แƒ แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? WSADATA แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ?, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒคแƒแƒ แƒแƒ•แƒก แƒ แƒแƒ’แƒแƒ  แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒ แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒ”แƒ‘แƒ?.

แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ?แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ?

แƒจแƒ”แƒฅแƒ›แƒœแƒ socket แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ แƒ•แƒ?แƒœแƒ›แƒ” แƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ?แƒ’แƒ?แƒ•แƒ” แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ?, แƒ’แƒแƒ แƒ“แƒ HOSTENT struct:

  • HOSTENT: แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ›แƒ”แƒแƒ แƒแƒ“แƒ?, แƒ แƒแƒ› แƒ’แƒ?แƒ—แƒฎแƒ แƒแƒ—, แƒกแƒแƒ™แƒ”แƒขแƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒฃแƒšแƒ? แƒ“แƒ แƒžแƒแƒ แƒขแƒ?แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ. แƒแƒ› แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒจแƒ? แƒฎแƒจแƒ?แƒ แƒแƒ“, แƒ แƒแƒ’แƒแƒ แƒช แƒฉแƒแƒœแƒก, LPHOSTENT แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ?, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ?แƒช แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ?แƒ—แƒ?แƒ—แƒ”แƒ‘แƒแƒก HOSTENT แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ”แƒ‘แƒจแƒ?. แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ™แƒแƒ“แƒ? Windows, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ–แƒแƒ’แƒแƒ“แƒแƒ“ แƒœแƒแƒฎแƒแƒ•แƒ—, แƒ แƒแƒ› แƒœแƒ”แƒ‘แƒ?แƒกแƒ›แƒ?แƒ”แƒ แƒ? แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ?แƒžแƒ? แƒฌแƒ?แƒœ แƒฃแƒซแƒฆแƒแƒ“แƒ LP แƒแƒฆแƒœแƒ?แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒขแƒ?แƒžแƒ? แƒแƒ แƒ?แƒก แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒ›แƒแƒ›แƒชแƒ”แƒ— “แƒ‘แƒแƒ–แƒ” แƒขแƒ?แƒžแƒ? (แƒ›แƒแƒ’แƒแƒšแƒ?แƒ—แƒแƒ“, LPCSTR แƒแƒ แƒ?แƒก แƒ›แƒแƒ›แƒชแƒ”แƒ— C string, แƒแƒกแƒ”แƒ•แƒ” แƒชแƒœแƒแƒ‘แƒ?แƒšแƒ?แƒ, แƒ แƒแƒ’แƒแƒ แƒช char *).

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒแƒ“แƒ?แƒ—, แƒ›แƒ?แƒ?แƒฆแƒแƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ แƒ™แƒแƒ“แƒ?:

#include <windows.h>

#include <winsock.h>

#include <stdio.h>



#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก NETWORK_ERROR -1

#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก NETWORK_OK 0



แƒ‘แƒแƒ—แƒ?แƒšแƒแƒ“ ReportError(int, const char *);





int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmd, int nShow)

{

 แƒกแƒ?แƒขแƒงแƒ•แƒ sockVersion;

 WSADATA wsaData;

 int nret;



 sockVersion = MAKEWORD(1, 1);





 // แƒ•แƒ แƒ—แƒแƒ• Winsock, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ“แƒ แƒ”

 WSAStartup(sockVersion, แƒ“แƒ wsaData);





 // Store แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”

 LPHOSTENT hostEntry;



 hostEntry = gethostbyname("www.yahoo.com"); // แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ?แƒก แƒ›แƒ?แƒ”แƒ  แƒ›แƒ?แƒกแƒ? แƒกแƒแƒฎแƒ”แƒšแƒ?;

 // แƒ™แƒ?แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ? แƒ•แƒแƒ แƒ?แƒแƒœแƒขแƒ?:gethostbyaddr()



 แƒ—แƒฃ (!hostEntry)

{

 nret = WSAGetLastError();

 ReportError(nret, "gethostbyname()"); // แƒแƒœแƒ’แƒแƒ แƒ?แƒจแƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ“แƒ แƒ”



WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}





 // แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— socket

 SOCKET theSocket;



 theSocket = socket(AF_INET, // แƒฌแƒแƒ•แƒ?แƒ“แƒ”แƒ— แƒ›แƒ”แƒขแƒ? TCP/IP

 SOCK_STREAM, // แƒ”แƒก แƒแƒ แƒ?แƒก stream-แƒแƒ แƒ?แƒ”แƒœแƒขแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? socket

 IPPROTO_TCP); // แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒแƒ— TCP แƒ•แƒ?แƒ“แƒ แƒ” UDP



 แƒ—แƒฃ (theSocket == INVALID_SOCKET)

{

 nret = WSAGetLastError();

 ReportError(nret, "socket()");



WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}





 // แƒจแƒ”แƒแƒ•แƒกแƒแƒ— SOCKADDR_IN struct แƒ”แƒ แƒ—แƒแƒ“ แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ

 SOCKADDR_IN serverInfo;



 serverInfo.sin_family = AF_INET;



 // แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ”, แƒฉแƒ•แƒ”แƒœ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ— แƒฌแƒแƒ™แƒ?แƒ—แƒฎแƒ•แƒ?แƒก แƒ—แƒแƒ แƒ?แƒฆแƒ?: แƒกแƒแƒกแƒ?แƒชแƒแƒชแƒฎแƒšแƒ แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”,

 // แƒ›แƒแƒ— แƒจแƒแƒ แƒ?แƒก แƒฐแƒแƒกแƒ—แƒ?แƒก, แƒ›แƒแƒ’แƒแƒšแƒ?แƒ—แƒ?, แƒ“แƒ IP แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ?. แƒ“แƒแƒ•แƒ”แƒšแƒแƒ“แƒแƒ—; แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ?

 // แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒฃแƒšแƒ? แƒ›แƒฅแƒแƒœแƒ“แƒ”แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ?, แƒ“แƒ แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒ แƒแƒ แƒ?แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ? แƒฎแƒแƒ–แƒ? แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก?

 // แƒœแƒแƒฎแƒแƒ— แƒแƒฎแƒกแƒœแƒ แƒฅแƒ•แƒ”แƒ›แƒแƒ—.



 serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);



 serverInfo.sin_port = htons(80); // แƒชแƒ•แƒšแƒ?แƒšแƒ”แƒ‘แƒ แƒฅแƒกแƒ”แƒšแƒ?-byte แƒ›แƒ?แƒ–แƒœแƒ?แƒ— แƒ“แƒ

 // insert into แƒžแƒแƒ แƒขแƒ? แƒกแƒคแƒ”แƒ แƒแƒจแƒ?





 // แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ

 nret = แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ(theSocket,

 (LPSOCKADDR) แƒ“แƒ serverInfo,

 sizeof(struct sockaddr));



 แƒ—แƒฃ (nret == SOCKET_ERROR)

{

 nret = WSAGetLastError();

 ReportError(nret, "connect()");



WSACleanup();

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}





 // แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ— แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ?!





 // Send/receive, แƒ›แƒแƒจแƒ?แƒœ แƒฌแƒ›แƒ”แƒœแƒ“แƒ:

closesocket(theSocket);

WSACleanup();

}





แƒ‘แƒแƒ—แƒ?แƒšแƒแƒ“ ReportError(int errorCode, const char *whichFunc)

{

 char errorMsg[92]; // แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒœ, แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ? แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ•แƒก

 // แƒ’แƒ”แƒœแƒ”แƒ แƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ



 ZeroMemory(errorMsg, 92); // แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ NULL-แƒจแƒ”แƒฌแƒงแƒ•แƒ?แƒขแƒแƒก string



 // แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ? แƒฎแƒแƒ–แƒ? แƒแƒกแƒšแƒ”แƒ‘แƒ? แƒคแƒ แƒแƒ–แƒ, whichFunc string, แƒ“แƒ แƒ แƒ?แƒชแƒฎแƒ•แƒ? errorCode แƒจแƒ”แƒ•แƒ?แƒ“แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?

 sprintf(errorMsg, "แƒ–แƒแƒ แƒ? %s แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ %d!", (char *)whichFunc, errorCode);



 MessageBox(NULL, errorMsg, "socketIndication", MB_OK);

}

แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ แƒ—แƒฃแƒšแƒ? แƒฎแƒแƒ–แƒ? แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒ? แƒแƒ แƒ?แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ?:

serverInfo.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);

แƒ?แƒ›แƒ?แƒขแƒแƒ›, แƒ แƒแƒ› แƒ?แƒ’แƒ? แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ?แƒ›แƒ” แƒแƒžแƒ”แƒ แƒแƒชแƒ?แƒ”แƒ‘แƒ?—แƒ”แƒ แƒ—แƒ? แƒ›แƒแƒ—แƒ’แƒแƒœแƒ? แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ?แƒ— แƒ“แƒแƒ›แƒแƒšแƒฃแƒšแƒ?—แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“. แƒแƒ•แƒ?แƒฆแƒแƒ— แƒ?แƒก แƒ’แƒแƒ แƒ“แƒ แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ?แƒ•แƒแƒ“:

“H_addr_list แƒฌแƒ”แƒ•แƒ แƒ? HOSTENT struct, แƒซแƒ?แƒ แƒ?แƒ—แƒแƒ“แƒแƒ“, แƒ’แƒแƒœแƒ?แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช char **h_addr_list, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒ›แƒแƒกแƒ?แƒ•แƒ? แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?, แƒแƒœ char *’s. gethostbyname() แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ? แƒ“แƒ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ แƒงแƒ•แƒ”แƒšแƒ แƒชแƒœแƒแƒ‘แƒ?แƒšแƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒจแƒ”แƒ•แƒ?แƒ“แƒ แƒแƒ› แƒกแƒ?แƒแƒจแƒ?. แƒ—แƒฃแƒ›แƒชแƒ, แƒ”แƒก แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ?แƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ? แƒคแƒฃแƒœแƒ“แƒแƒ›แƒ”แƒœแƒขแƒฃแƒ แƒแƒ“ แƒแƒ–แƒ แƒ?? แƒกแƒ?แƒœแƒแƒ›แƒ“แƒ•แƒ?แƒšแƒ”แƒจแƒ?, แƒ”แƒก แƒแƒกแƒ”แƒ. แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒจแƒ?, แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ?แƒ•แƒแƒ“, แƒฃแƒ™แƒ•แƒ” แƒ›แƒแƒกแƒ?แƒ•แƒ? แƒ–แƒแƒ’แƒแƒ“แƒ? แƒฅแƒกแƒ”แƒšแƒ?แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ?. แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒ?แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ?แƒงแƒแƒก 205.182.67.96, แƒ—แƒฅแƒ•แƒ”แƒœแƒ? LAN แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ?แƒงแƒแƒก 10.0.0.2, แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒคแƒแƒœแƒฏแƒ แƒ”แƒ‘แƒ? แƒแƒ แƒ?แƒก แƒ“แƒแƒ›แƒแƒœแƒขแƒแƒŸแƒ”แƒ‘แƒฃแƒšแƒ?, แƒ‘แƒฃแƒœแƒ”แƒ‘แƒ แƒ?แƒ•แƒ?แƒ, แƒแƒฅแƒ•แƒก “loopback” แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? 127.0.0.1, แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒฃแƒšแƒ? แƒ?แƒฎแƒ?แƒšแƒ”แƒ— แƒ—แƒแƒ•แƒแƒ“ แƒšแƒแƒ™แƒแƒšแƒฃแƒ  แƒฅแƒกแƒ”แƒšแƒจแƒ?. แƒ?แƒ’แƒ?แƒ•แƒ” แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ?แƒ แƒ”แƒฎแƒ”แƒ‘แƒ แƒกแƒคแƒ”แƒ แƒแƒจแƒ? แƒ?แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ? แƒแƒœ IP-แƒก, แƒ แƒ?แƒก แƒ’แƒแƒ›แƒแƒช แƒกแƒ?แƒแƒจแƒ? แƒแƒ แƒ?แƒก แƒกแƒแƒญแƒ?แƒ แƒ, แƒ•แƒ?แƒ“แƒ แƒ” แƒกแƒแƒชแƒแƒ•แƒ? แƒ”แƒ แƒ—แƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?. แƒ’แƒแƒ?แƒ—แƒ•แƒแƒšแƒ?แƒกแƒฌแƒ?แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?, แƒ แƒแƒ› แƒแƒ แƒ?แƒก, แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒฎแƒ”แƒšแƒ›แƒ?แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?, แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ?แƒก แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ แƒจแƒ”แƒ•แƒ?แƒ“แƒ แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ? แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ? แƒกแƒ?แƒแƒจแƒ?, แƒ แƒแƒกแƒแƒช แƒ›แƒแƒฐแƒงแƒ•แƒ แƒ›แƒ”แƒแƒ แƒ” แƒแƒ›แƒฏแƒแƒ‘แƒ?แƒœแƒ แƒแƒœ แƒกแƒฎแƒ•แƒ แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ?.

แƒ แƒ *hostEntry->h_addr_list แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก? แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒšแƒ‘แƒแƒ— แƒ›แƒ?แƒฎแƒ•แƒ“แƒ”แƒ‘แƒ?, แƒ แƒแƒ› แƒžแƒแƒขแƒ?แƒ•แƒ?แƒกแƒชแƒ”แƒ›แƒ?แƒก แƒœแƒ?แƒจแƒœแƒแƒ“ แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ? (*) แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒฌแƒ•แƒ“แƒแƒ›แƒ?แƒก แƒ”แƒ แƒ— แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒกแƒ?แƒแƒจแƒ?. แƒ—แƒฃแƒ›แƒชแƒ, แƒ•แƒ”แƒ  แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ?, dereference แƒแƒžแƒ”แƒ แƒแƒชแƒ?แƒ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒแƒ•แƒšแƒ”แƒœแƒก แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ?, แƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?. แƒ แƒแƒ› แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒ›แƒแƒœแƒแƒ™แƒ•แƒ”แƒ—แƒ?แƒก แƒฃแƒ“แƒ แƒ?แƒก *hostEntry->h_addr_list[0], แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒแƒ แƒ?แƒก แƒ’แƒแƒ แƒแƒœแƒขแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ?, แƒ แƒแƒ› แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒฃแƒœแƒ“แƒ แƒฐแƒฅแƒแƒœแƒ“แƒ”แƒก แƒ›แƒ?แƒœแƒ?แƒ›แƒฃแƒ› แƒ”แƒ แƒ—แƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ?, char * แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ dereferencing แƒแƒžแƒ”แƒ แƒแƒชแƒ?แƒ แƒแƒ แƒ?แƒก แƒ›แƒ?แƒชแƒ”แƒ›แƒฃแƒšแƒ? แƒจแƒ”แƒ•แƒ?แƒ“แƒ in_addr * แƒแƒœ LPIN_ADDR. แƒ“แƒ แƒ‘แƒแƒšแƒแƒก, แƒ™แƒ?แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ? แƒžแƒแƒ แƒแƒ“แƒ?แƒ’แƒ›แƒ”แƒ‘แƒ?, แƒขแƒ”แƒ แƒ›แƒ?แƒœแƒแƒšแƒแƒ’แƒ?แƒฃแƒ แƒ? แƒแƒžแƒ”แƒ แƒแƒชแƒ?แƒ แƒฎแƒแƒ แƒชแƒ?แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒแƒก in_addr struct แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ?แƒ”แƒ‘แƒฃแƒšแƒ? แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ hold แƒ”แƒ แƒ—แƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ in_addr struct แƒแƒ แƒ?แƒก แƒ›แƒแƒจแƒ?แƒœ แƒ”แƒœแƒ?แƒญแƒ”แƒ‘แƒ serverInfo.sin_addr. แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ connect() แƒ?แƒฆแƒ”แƒ‘แƒก แƒ”แƒ แƒ— แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ?, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒคแƒแƒ แƒ›แƒ?แƒ แƒ”แƒ‘แƒ?แƒก แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”.

แƒ—แƒฃ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ?แƒก IP แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒแƒ แƒ?แƒก แƒชแƒœแƒแƒ‘แƒ?แƒšแƒ?, แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ? HOSTENT แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ?แƒงแƒแƒก แƒ›แƒ?แƒฆแƒ”แƒ‘แƒฃแƒšแƒ? แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ?แƒก gethostbyaddr() (แƒ แƒแƒ’แƒแƒ แƒช แƒ”แƒฌแƒ?แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒ”แƒ‘แƒแƒ“แƒ gethostbyname() แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒฌแƒ?แƒœแƒ แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒ?):

LPHOSTENT hostEntry;

in_addr iaHost;



iaHost.s_addr = inet_addr("204.52.135.52");



hostEntry = gethostbyaddr((const char *)&iaHost, sizeof(struct in_addr), AF_INET);



แƒ—แƒฃ (!hostEntry)

{

 // แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ? แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ?แƒกแƒแƒ“

}

แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ?, inet_addr() แƒแƒ แƒ?แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ? แƒแƒกแƒšแƒ? แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?แƒแƒœแƒ? แƒแƒฆแƒ›แƒœแƒ?แƒจแƒ•แƒœแƒ”แƒšแƒ? IP แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒžแƒ?แƒ แƒ“แƒแƒžแƒ?แƒ  in_addr struct. แƒแƒ›แƒ?แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? struct แƒแƒ แƒ?แƒก แƒ›แƒ?แƒชแƒ”แƒ›แƒฃแƒšแƒ? แƒจแƒ”แƒ•แƒ?แƒ“แƒ const char * แƒ แƒแƒ’แƒแƒ แƒช แƒแƒ›แƒแƒก gethostbyaddr(). แƒแƒ แƒ?แƒ•แƒ” แƒ›แƒ”แƒ—แƒแƒ“แƒ? แƒแƒ แƒ?แƒก แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ?แƒ”แƒ‘แƒฃแƒšแƒ?, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒ’แƒ•แƒแƒ แƒ”แƒ‘แƒแƒจแƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ?แƒก แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ?, แƒ แƒแƒ“แƒ’แƒแƒœ Winsock แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒกแƒ แƒฃแƒšแƒ? แƒ›แƒ?แƒกแƒแƒ›แƒแƒ แƒ—แƒ? แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ? แƒœแƒแƒฌแƒ?แƒšแƒแƒ‘แƒ แƒ?แƒ•แƒ? แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ.

แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ?แƒ›แƒ” แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ—แƒ? แƒจแƒ”แƒœแƒ?แƒจแƒ•แƒœแƒ”แƒ‘แƒ?: port 80 แƒ?แƒงแƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ?, แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ?แƒ›แƒ?แƒขแƒแƒ›, แƒ แƒแƒ› แƒ?แƒœแƒขแƒ”แƒ แƒœแƒ”แƒข แƒ•แƒ”แƒ‘ แƒ’แƒ•แƒ”แƒ แƒ“แƒ? แƒ’แƒ–แƒแƒ•แƒœแƒ?แƒšแƒ”แƒ‘แƒ? แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒ›แƒ”แƒขแƒ?, แƒ แƒแƒ› แƒžแƒแƒ แƒขแƒ?. แƒ—แƒฃ แƒ?แƒงแƒ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?แƒแƒœแƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ?แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒคแƒแƒ?แƒšแƒ? แƒ“แƒ แƒชแƒ“แƒ?แƒšแƒแƒ‘แƒ”แƒœ แƒ›แƒ?แƒ?แƒฆแƒแƒœ แƒ แƒแƒฆแƒแƒช แƒฃแƒ™แƒแƒœ, แƒœแƒ”แƒขแƒแƒ•, แƒแƒฅแƒ•แƒก แƒซแƒแƒšแƒ?แƒแƒœ แƒ›แƒแƒ แƒขแƒ?แƒ•แƒ? web browser. แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ แƒแƒ› แƒขแƒ”แƒฅแƒกแƒขแƒ? แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ?แƒชแƒแƒ•แƒ“แƒ”แƒก แƒกแƒ แƒฃแƒš HTTP แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ. แƒ”แƒก แƒแƒ แƒ?แƒก แƒ“แƒ?แƒ“แƒ?, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒฃแƒกแƒ›แƒ?แƒœแƒแƒก แƒ“แƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ แƒกแƒฎแƒ•แƒ แƒ™แƒแƒ›แƒžแƒ?แƒฃแƒขแƒ”แƒ แƒ”แƒ‘แƒ?, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒแƒ™แƒแƒ›แƒฃแƒœแƒ?แƒ™แƒแƒชแƒ?แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒ?แƒชแƒแƒ•แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒก แƒ“แƒ แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ?แƒก.

แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒก แƒ“แƒ แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ?แƒก

แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒก แƒกแƒ?แƒคแƒ แƒ—แƒฎแƒ?แƒšแƒ?แƒ—, แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒกแƒแƒ™แƒ›แƒแƒ แƒ?แƒกแƒ?, send() แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ:

int แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก(

 SOCKET s,

 const char * แƒจแƒแƒ แƒก buf,

 int len,

 int แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒ?

);

แƒซแƒ?แƒ แƒ?แƒ—แƒแƒ“แƒแƒ“ แƒ—แƒฅแƒ•แƒ”แƒœ, แƒ แƒแƒ› แƒแƒกแƒšแƒ?, แƒ แƒแƒช แƒฃแƒœแƒ“แƒแƒ“แƒ, into a buffer แƒ“แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ send() แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ?แƒ แƒ‘แƒฃแƒ“แƒ”, แƒ แƒแƒ—แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?แƒก แƒฌแƒแƒกแƒ•แƒšแƒ แƒกแƒฎแƒ•แƒ แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒ?:

char buffer[256]; // แƒ’แƒแƒ›แƒแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ?แƒก stack buffer

char *แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ? = new char[256]; // แƒแƒœ แƒ‘แƒ”แƒ•แƒ แƒ?



ZeroMemory(แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?, 256);

strcpy(แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?, "แƒ•แƒ?แƒขแƒงแƒ•แƒ?, แƒ”แƒก แƒแƒ แƒ?แƒก แƒ›แƒœแƒ?แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ? แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?.");



nret = แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก(theSocket,

buffer,

 strlen(แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?), // แƒ’แƒแƒ?แƒ—แƒ•แƒแƒšแƒ?แƒกแƒฌแƒ?แƒœแƒแƒ—, แƒ แƒแƒ› แƒ”แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒกแƒ?แƒ’แƒ แƒซแƒ”แƒ–แƒ” แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?แƒแƒœแƒ?; แƒแƒ 

 // แƒ–แƒแƒ›แƒ แƒ›แƒ—แƒ”แƒšแƒ? แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?

 0); // แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒฎแƒจแƒ?แƒ แƒแƒ“ แƒแƒ แƒ?แƒก แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ?, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ•แƒฎแƒ”แƒ“แƒแƒ• MSDN แƒกแƒฎแƒ•แƒ แƒ•แƒแƒ แƒ?แƒแƒœแƒขแƒ?



delete [] แƒ‘แƒฃแƒคแƒ”แƒ แƒ?; // แƒ—แƒฃ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒฃ แƒ‘แƒ”แƒ•แƒ แƒ? แƒ“แƒ”แƒ™แƒšแƒแƒ แƒแƒชแƒ?แƒ แƒ?แƒงแƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ?,



แƒ—แƒฃ (nret == SOCKET_ERROR)

{

 // แƒ›แƒ?แƒ?แƒฆแƒแƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒ™แƒแƒ“แƒ?

 // แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ? แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ?แƒกแƒแƒ“

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

} else {

 // nret แƒจแƒ”แƒ?แƒชแƒแƒ•แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ?แƒก แƒ‘แƒแƒ?แƒขแƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒšแƒ?

}

แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ แƒแƒ แƒ?แƒก แƒ?แƒ’แƒ?แƒ•แƒ” แƒžแƒ แƒแƒชแƒ”แƒกแƒ?, แƒฃแƒ™แƒแƒœ:

char buffer[256]; // แƒ“แƒแƒกแƒขแƒ?แƒก

char *แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ? = new char[256]; // แƒแƒœ แƒ‘แƒ”แƒ•แƒ แƒ?



nret = recv(theSocket,

buffer,

 256,//, แƒกแƒ แƒฃแƒšแƒ? แƒ–แƒแƒ›แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?

0);



delete [] แƒ‘แƒฃแƒคแƒ”แƒ แƒ?; // แƒ›แƒแƒœแƒ?แƒžแƒฃแƒšแƒ?แƒ แƒ”แƒ‘แƒ buffer, แƒ›แƒแƒจแƒ?แƒœ แƒฌแƒแƒจแƒแƒšแƒ”, แƒ—แƒฃ แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ—แƒฃ

 // แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ? แƒ?แƒงแƒ แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒ?แƒšแƒ? แƒ‘แƒ”แƒ•แƒ แƒ?



แƒ—แƒฃ (nret == SOCKET_ERROR)

{

 // แƒ›แƒ?แƒ?แƒฆแƒแƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ? แƒ™แƒแƒ“แƒ?

 // แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ? แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ?แƒกแƒแƒ“

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

} else {

 // nret แƒจแƒ”แƒ?แƒชแƒแƒ•แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ?แƒก แƒ‘แƒแƒ?แƒขแƒก แƒ›แƒ?แƒ?แƒฆแƒ

}

แƒ แƒ แƒกแƒแƒ?แƒœแƒขแƒ”แƒ แƒ”แƒกแƒแƒ, แƒฃแƒœแƒ“แƒ แƒแƒฆแƒ?แƒœแƒ?แƒจแƒœแƒแƒก, แƒ แƒแƒ› แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒฆแƒ?แƒšแƒแƒ™แƒก แƒžแƒแƒœแƒ”แƒšแƒ? Microsoft Outlook แƒจแƒ”แƒแƒคแƒแƒกแƒ “แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก/Recv.” “แƒ›แƒ?แƒ?แƒฆแƒแƒก” แƒจแƒ”แƒ›แƒแƒ™แƒšแƒ”แƒ‘แƒ?แƒ— “Recv” , แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“, แƒฃแƒœแƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก แƒฆแƒ?แƒšแƒแƒ™แƒก แƒ’แƒแƒ›แƒแƒ?แƒงแƒฃแƒ แƒ”แƒ‘แƒ แƒฃแƒคแƒšแƒ”แƒ‘แƒ, แƒแƒœ แƒ”แƒก programmer-แƒ?แƒก แƒฉแƒ•แƒ”แƒ•แƒ แƒกแƒแƒฌแƒงแƒ?แƒกแƒ? แƒแƒ™แƒ แƒ”แƒคแƒ recv() แƒ?แƒ›แƒ“แƒ”แƒœแƒฏแƒ”แƒ ? แƒคแƒแƒ แƒ›แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? แƒจแƒ”แƒ—แƒฅแƒ›แƒฃแƒšแƒ”แƒ‘แƒ?แƒก แƒ—แƒ”แƒแƒ แƒ?แƒ”แƒ‘แƒ? (แƒ™แƒ?แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš, แƒ™แƒแƒ แƒ’แƒ? smalltalk แƒžแƒแƒ แƒขแƒ?แƒ”แƒ‘แƒ?).

แƒ”แƒก แƒแƒ แƒ?แƒก แƒกแƒแƒ“แƒแƒช แƒ›แƒ” แƒจแƒ”แƒฃแƒ•แƒแƒ แƒ“แƒœแƒ”แƒœ แƒžแƒแƒขแƒแƒ แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฌแƒ”แƒ แƒ แƒฉแƒ”แƒ›แƒ? แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ? Winsock แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ”แƒ‘แƒ?. แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ?แƒ— recv() แƒแƒ แƒ?แƒก แƒ“แƒ?แƒ“แƒ?, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ?แƒชแƒ?แƒ— แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ? แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ? แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒ”แƒฅแƒœแƒ”แƒ‘แƒแƒ— แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ (แƒแƒกแƒ”แƒ—แƒ?, แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒแƒ›แƒแƒจแƒ?, แƒกแƒแƒ“แƒแƒช แƒžแƒ?แƒ แƒ•แƒ”แƒšแƒ? แƒ‘แƒแƒ?แƒขแƒ? แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ byte แƒ?แƒงแƒแƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ? แƒ“แƒ แƒ. แƒจ.), แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒชแƒ แƒแƒ  แƒ?แƒชแƒ?, แƒ แƒ แƒ•แƒฅแƒœแƒแƒ—? แƒ—แƒฃ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ? แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ?แƒก แƒจแƒ”แƒฌแƒงแƒ•แƒ”แƒขแƒ?แƒกแƒแƒก แƒ›แƒ?แƒ”แƒ  newline แƒฎแƒแƒกแƒ?แƒแƒ—แƒ? (แƒกแƒแƒ”แƒ แƒ—แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ Java แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒกแƒแƒฃแƒ‘แƒแƒ แƒ? C แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ?), แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ?แƒซแƒšแƒ?แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— readLine() แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ?แƒก แƒฎแƒ”แƒšแƒจแƒ? แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ?, แƒ แƒแƒ› แƒฎแƒแƒกแƒ?แƒแƒ—แƒ?. แƒแƒ? แƒ แƒ แƒ›แƒ”:

char * readLine()

{

 vectortheVector;

 char buffer;

 int bytesReceived;



 while (true)

{

 bytesReceived = recv(theSocket, แƒ“แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?, 1, 0);

 แƒ—แƒฃ (bytesReceived <= 0)

 return NULL;



 แƒ—แƒฃ (แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ? == '\n')

{

 char *pChar = new char[theVector.แƒ–แƒแƒ›แƒ() + 1];

 memset(pChar, 0, theVector.แƒ–แƒแƒ›แƒ() + 1);



 for (int f = 0; f < theVector.แƒ–แƒแƒ›แƒ(); แƒ•++)

 pChar[f] = theVector[f];



 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ pChar;

 } else {

theVector.push_back(แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?);

}

}

}

แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ? แƒแƒ แƒ?แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ? แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒ›แƒแƒกแƒ?แƒ•แƒ?, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒ?แƒกแƒ? แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ แƒคแƒแƒ แƒ—แƒ? แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ?แƒ–แƒแƒ แƒ“แƒแƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒ•แƒแƒ แƒ?แƒแƒœแƒขแƒก แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ?แƒ•แƒแƒ‘แƒ แƒฎแƒแƒ–แƒ?. แƒ—แƒฃ recv() แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ?แƒก (แƒ›แƒ?แƒ—แƒ?แƒ—แƒ”แƒ‘แƒฃแƒšแƒ?แƒ bytesReceived แƒ›แƒ?แƒ›แƒ“แƒ?แƒœแƒแƒ แƒ”แƒแƒ‘แƒก แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ?แƒ, แƒ•แƒ?แƒ“แƒ แƒ” แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ?), NULL แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ. แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒแƒ แƒ?แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ, แƒ›แƒแƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ? แƒฃแƒœแƒ“แƒ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒก, แƒ แƒแƒ› string แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ readLine() แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒก แƒแƒ“แƒ แƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒจแƒ?แƒ’แƒœแƒ?แƒ— loop, แƒ”แƒ แƒ—แƒ? char แƒแƒ แƒ?แƒก แƒ›แƒ?แƒฆแƒ”แƒ‘แƒฃแƒšแƒ? แƒ‘แƒฃแƒ“แƒ” แƒ“แƒ, แƒ—แƒฃ แƒแƒ  แƒแƒ แƒ?แƒก newline แƒฎแƒแƒกแƒ?แƒแƒ—แƒ?, แƒ“แƒแƒกแƒซแƒ?แƒœแƒ, แƒ แƒแƒ› แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ?. แƒ—แƒฃ แƒ”แƒก แƒแƒ แƒ?แƒก newline แƒฎแƒแƒกแƒ?แƒแƒ—แƒ?, แƒจแƒ?แƒœแƒแƒแƒ แƒกแƒ? แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ? แƒแƒ แƒ?แƒก แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ?แƒšแƒ? แƒจแƒ”แƒ•แƒ?แƒ“แƒ C แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?แƒแƒœแƒ? แƒ“แƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ. แƒกแƒ?แƒ›แƒ”แƒ‘แƒ?แƒแƒœแƒ? แƒแƒ แƒ?แƒก แƒ“แƒ”แƒ™แƒšแƒแƒ แƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒฃแƒœแƒ“แƒ แƒ?แƒงแƒแƒก แƒ”แƒ แƒ—แƒ? char แƒฃแƒคแƒ แƒ แƒ“แƒ?แƒ“แƒ?, แƒ•แƒ?แƒ“แƒ แƒ” แƒ•แƒ”แƒฅแƒขแƒแƒ แƒ? แƒ“แƒ memset()’ted แƒœแƒฃแƒšแƒแƒ•แƒแƒœแƒ? แƒ?แƒกแƒ”, แƒ แƒแƒ› แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ line แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ NULL-แƒฌแƒงแƒ“แƒ”แƒ‘แƒ. แƒ“แƒแƒ›แƒ—แƒแƒ•แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒกแƒ?แƒ›แƒ”แƒ‘แƒ? NULL แƒฎแƒ”แƒšแƒก แƒฃแƒจแƒšแƒ?แƒก แƒฃแƒฉแƒ•แƒ”แƒฃแƒšแƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ? แƒ“แƒ, แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ™แƒแƒ แƒ’แƒ? แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ?แƒ แƒ”แƒ‘แƒ?แƒก แƒžแƒ แƒแƒฅแƒขแƒ?แƒ™แƒ.

แƒ“แƒ แƒแƒ แƒช แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ”แƒก แƒญแƒ™แƒ•แƒ?แƒแƒœแƒฃแƒ แƒแƒ“ แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ? แƒ•แƒ”แƒ แƒกแƒ?แƒ แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ backspaces แƒ“แƒ แƒฃแƒœแƒแƒ แƒ? แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒก newline แƒฎแƒแƒกแƒ?แƒแƒ—แƒ? แƒ›แƒแƒ แƒขแƒ?แƒ•แƒแƒ“:

// แƒ™แƒแƒ“แƒ? แƒ—แƒแƒ•แƒ“แƒแƒžแƒ?แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ“แƒแƒฌแƒ”แƒ แƒ?แƒšแƒ? แƒ“แƒ แƒแƒ แƒช. แƒจแƒ”แƒชแƒ•แƒšแƒ?แƒšแƒ?แƒ แƒแƒ“แƒœแƒแƒ•

// แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ MessageBox() API, แƒ แƒแƒ—แƒ แƒšแƒแƒ’แƒ?แƒ™แƒ แƒฃแƒคแƒ แƒ แƒ?แƒ™แƒ?แƒ—แƒฎแƒ”แƒ‘แƒ,

// แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ แƒ?แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ?, แƒ“แƒ แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ?. แƒ’แƒแƒ›แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒšแƒ?แƒ แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ?แƒ—.



#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก backKey '\b' // แƒ’แƒแƒ›แƒแƒ แƒ—แƒแƒ— backspaces, #define backKey NULL

#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก newLine '\n'

#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก endStr '\0'



char *readLine(SOCKET s)

{

 vectortheVector;

 char buffer;

 char *pChar;

 int bytesReceived;



 while (true)

{

 bytesReceived = recv(s, แƒ“แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?, 1, 0);



 แƒ—แƒฃ (bytesReceived <= 0)

{

 MessageBox(NULL, "recv() แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒแƒ แƒแƒคแƒ”แƒ แƒ?.", "socketIndication", MB_OK);

 return NULL;

}



 switch (แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?)

{

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? backKey: // แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ? แƒฃแƒ™แƒฃแƒกแƒ•แƒšแƒ?แƒก

 แƒ—แƒฃ (theVector.แƒ–แƒแƒ›แƒ() > 0)

theVector.pop_back();

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? endStr: // If end of string char แƒ›แƒ?แƒแƒฆแƒฌแƒ?แƒ,

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? newLine: // แƒแƒœ แƒ—แƒฃ end of line char แƒ›แƒ?แƒแƒฆแƒฌแƒ?แƒ,

 pChar = new char[theVector.แƒ–แƒแƒ›แƒ() + 1];

 memset(pChar, 0, theVector.แƒ–แƒแƒ›แƒ() + 1);



  for (int f = 0; f < theVector.แƒ–แƒแƒ›แƒ(); แƒ•++)

 pChar[f] = theVector[f];

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ pChar;

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

 default: // แƒœแƒ”แƒ‘แƒ?แƒกแƒ›แƒ?แƒ”แƒ แƒ? แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ? char

theVector.push_back(แƒ‘แƒฃแƒคแƒ”แƒ แƒฃแƒšแƒ?);

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

}

}

}

แƒแƒ แƒแƒกแƒแƒ›แƒ—แƒแƒ•แƒ แƒแƒ‘แƒ แƒ‘แƒšแƒแƒ™แƒ?แƒ แƒ”แƒ‘แƒ แƒ“แƒ แƒแƒกแƒ?แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ? แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก

แƒกแƒแƒœแƒแƒ› แƒแƒ› แƒ”แƒขแƒแƒžแƒ–แƒ” แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ•แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒ— แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก, แƒกแƒแƒ“แƒแƒช แƒ›แƒแƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ”แƒœ แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ, แƒ แƒแƒ’แƒแƒ แƒ?แƒชแƒแƒ แƒ›แƒ?แƒ?แƒฆแƒแƒก() แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒœแƒฃแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒšแƒ? แƒ•แƒแƒ“แƒ?แƒ— แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ?แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒ. แƒแƒ แƒแƒกแƒแƒ›แƒ—แƒแƒ•แƒ แƒแƒ‘แƒ แƒ“แƒแƒ‘แƒšแƒแƒ™แƒ•แƒ socket แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒจแƒ?แƒœแƒ•แƒ”, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ?แƒก แƒ’แƒแƒœแƒฃแƒชแƒฎแƒแƒ“แƒ, แƒ แƒแƒ› แƒ แƒแƒ›แƒ”, แƒแƒ แƒช แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ? แƒจแƒ”แƒ“แƒ”แƒ’แƒ?, แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ, แƒแƒœ แƒแƒ แƒแƒคแƒ”แƒ แƒ? (แƒ แƒแƒช แƒ›แƒ?แƒฃแƒ—แƒ?แƒ—แƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒแƒ  แƒ?แƒฅแƒœแƒ”แƒ‘แƒ แƒ แƒแƒฆแƒแƒช, แƒ แƒแƒ› แƒ›แƒ?แƒ?แƒฆแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’). แƒ›แƒ?แƒœแƒฃแƒกแƒ? แƒ”แƒก แƒขแƒ?แƒžแƒ? แƒแƒ แƒ?แƒก แƒ?แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒฎแƒ”แƒšแƒ?แƒ— แƒจแƒ”แƒ™แƒ?แƒ—แƒฎแƒ•แƒ?แƒก แƒกแƒแƒ™แƒ”แƒขแƒ? แƒ—แƒฃ แƒจแƒ”แƒ“แƒ”แƒ’แƒ? แƒ“แƒแƒ“แƒ’แƒ แƒงแƒแƒ•แƒ”แƒš แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ“แƒแƒ แƒ”แƒ™แƒ”แƒ—. แƒ—แƒฅแƒ•แƒ”แƒœ แƒ•แƒ”แƒ  แƒ’แƒแƒ?แƒ•แƒšแƒ?แƒก แƒ™แƒแƒ›แƒžแƒšแƒ”แƒฅแƒขแƒ? แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก, แƒ แƒแƒ› select() แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ, แƒ—แƒฃ แƒ แƒแƒ›แƒ”แƒšแƒ? แƒžแƒ?แƒ แƒแƒ‘แƒ แƒแƒ แƒ?แƒก แƒ›แƒ–แƒแƒ“ แƒ™แƒ?แƒ—แƒฎแƒ•แƒ, แƒฌแƒ”แƒ แƒ, แƒแƒœ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ?.

แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ”แƒ‘แƒ?แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ?แƒ— แƒแƒกแƒ?แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ? แƒกแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ?แƒก แƒแƒกแƒ”แƒ•แƒ” แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒแƒก แƒ“แƒแƒฃแƒงแƒแƒ•แƒœแƒ”แƒ‘แƒšแƒ?แƒ•, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ?แƒซแƒšแƒ?แƒแƒ— แƒ›แƒ?แƒฃแƒ—แƒ?แƒ—แƒแƒ— แƒฌแƒ”แƒ แƒ?แƒšแƒ?แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒคแƒแƒœแƒฏแƒ แƒ?แƒก แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ? แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ แƒ›แƒแƒฎแƒ“แƒ. แƒ›แƒแƒ’แƒแƒšแƒ?แƒ—แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ?แƒซแƒšแƒ?แƒแƒ— socket แƒ’แƒแƒ›แƒแƒ’แƒ•แƒ?แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ— SOCKET_GOTMSG แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ›แƒแƒจแƒ?แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ?แƒก แƒ?แƒฆแƒ”แƒ‘แƒก แƒ แƒแƒ?แƒ›แƒ”. แƒ แƒแƒ’แƒแƒ แƒช แƒฌแƒ”แƒกแƒ?, แƒ”แƒก แƒญแƒ™แƒ•แƒ?แƒแƒœแƒ? แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ”แƒ‘แƒ? (แƒ แƒ—แƒฃแƒšแƒ?, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฃแƒชแƒ?แƒšแƒ”แƒ‘แƒ”แƒšแƒ?), แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒ?แƒ?แƒฆแƒ”แƒ‘แƒ— socket แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ, แƒ แƒแƒ—แƒ แƒ—แƒแƒ•แƒ?แƒ“แƒแƒœ แƒแƒ?แƒชแƒ?แƒšแƒแƒก, แƒ แƒแƒ›แƒแƒช แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒ? แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ? แƒ›แƒแƒ’แƒ•แƒ?แƒแƒœแƒ”แƒ‘แƒ?แƒ—. แƒžแƒ?แƒ แƒ•แƒ”แƒš แƒ แƒ?แƒ’แƒจแƒ?, แƒ›แƒแƒ“แƒ?แƒ— แƒ’แƒแƒœแƒ•แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— แƒ–แƒแƒ’แƒ?แƒ”แƒ แƒ—แƒ? แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒ—, แƒ แƒแƒ—แƒ แƒจแƒ”แƒ?แƒฅแƒ›แƒœแƒแƒก แƒแƒกแƒ?แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ? แƒ‘แƒฃแƒ“แƒ”:

  • int WSAAsyncSelect ( SOCKET s, HWND hwnd, unsigned int wMsg, แƒšแƒ”แƒ•แƒ”แƒœแƒ— )
    แƒ”แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ—แƒ แƒ“แƒแƒ“แƒ’แƒ?แƒœแƒ“แƒ”แƒก socket แƒ แƒแƒ’แƒแƒ แƒช แƒแƒกแƒ?แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ? แƒ“แƒ แƒแƒกแƒแƒชแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ?แƒ’แƒ?. s แƒแƒ แƒ?แƒก socket แƒ—แƒฅแƒ•แƒ”แƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ. hwnd แƒแƒ แƒ?แƒก แƒกแƒแƒฎแƒ”แƒšแƒฃแƒ แƒ? แƒคแƒแƒœแƒฏแƒแƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒ›แƒ?แƒ?แƒฆแƒ”แƒ‘แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ‘แƒฃแƒ“แƒ” แƒฅแƒ›แƒœแƒ?แƒก แƒฆแƒแƒœแƒ?แƒกแƒซแƒ?แƒ”แƒ‘แƒ. wMsg แƒแƒ แƒ?แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ’แƒกแƒฃแƒ แƒ— แƒ’แƒแƒฃแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒคแƒแƒœแƒฏแƒแƒ แƒ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ (แƒ›แƒแƒ’แƒแƒšแƒ?แƒ—แƒแƒ“, แƒแƒ แƒ?แƒก SOCKET_GOTMSG แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ–แƒ”แƒ›แƒแƒ—). “แƒšแƒ”แƒ•แƒ”แƒœแƒ— แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ? แƒ?แƒฆแƒ”แƒ‘แƒก แƒ”แƒ แƒ— แƒแƒœ แƒ›แƒ”แƒข แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒ? แƒ แƒแƒ› แƒ’แƒ?แƒ—แƒฎแƒ แƒแƒ—, แƒกแƒแƒ™แƒ”แƒขแƒ?, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ”แƒ‘แƒ?, แƒ’แƒแƒ›แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ?แƒœแƒ”แƒ‘แƒ. แƒ–แƒแƒ’แƒ?แƒ”แƒ แƒ—แƒ? แƒ?แƒ› แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒ?:

    • FD_READ: Socket แƒแƒ แƒ?แƒก แƒ›แƒ–แƒแƒ“, แƒ›แƒ?แƒ?แƒฆแƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?
    • FD_WRITE: แƒ‘แƒฃแƒ“แƒ” แƒ›แƒ–แƒแƒ“ แƒแƒ แƒ?แƒก แƒ’แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?
    • FD_ACCEPT: แƒ›แƒ”แƒแƒ แƒแƒ“แƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ?, แƒ”แƒก แƒฌแƒ”แƒ แƒ?แƒšแƒ? แƒ›แƒ?แƒฃแƒ—แƒ?แƒ—แƒ”แƒ‘แƒก, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ? แƒฃแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ“แƒ”แƒ‘แƒ
    • FD_CONNECT: แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒ?แƒ”แƒœแƒขแƒ?แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ, แƒ”แƒก แƒ›แƒ”แƒกแƒ?แƒฏแƒ? แƒ”แƒฃแƒ‘แƒœแƒ”แƒ‘แƒ, แƒกแƒแƒ™แƒ”แƒขแƒ? แƒแƒฅแƒ•แƒก แƒฃแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ“แƒ”แƒ‘แƒ
    • FD_CLOSE: socket แƒแƒฎแƒšแƒแƒฎแƒแƒœแƒก แƒ“แƒแƒ?แƒฎแƒฃแƒ แƒ
  • WSAGETSELECTERROR ( LPARAM lparam )
    แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก, แƒ—แƒฃ socket แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ. แƒขแƒ”แƒฅแƒœแƒ?แƒ™แƒฃแƒ แƒแƒ“, แƒ”แƒก แƒแƒ  แƒแƒ แƒ?แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ™แƒ แƒ (แƒ—แƒฅแƒ•แƒ”แƒœ แƒœแƒแƒ›แƒ“แƒ•แƒ?แƒšแƒแƒ“ แƒ’แƒ”แƒœแƒ”แƒ แƒ?แƒ แƒ”แƒ‘แƒ smalltalk แƒžแƒแƒ แƒขแƒ?แƒ”แƒ‘แƒ? แƒแƒ› แƒžแƒแƒขแƒแƒ แƒ factoid).
  • WSAGETSELECTEVENT ( LPARAM lparam )
    แƒ™แƒ?แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ? แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ›แƒแƒ™แƒ แƒ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ? winsock2.h แƒแƒ แƒ?แƒก WSAGETSELECTEVENT(), แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒแƒ แƒ?แƒก แƒ›แƒ”แƒแƒ แƒแƒ“แƒ?, แƒ แƒแƒ› แƒœแƒแƒฎแƒแƒ— แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒ socket แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ›แƒแƒ“แƒ?แƒ—, แƒจแƒ”แƒ?แƒฅแƒ›แƒœแƒ แƒแƒกแƒ?แƒœแƒฅแƒ แƒแƒœแƒฃแƒšแƒ? แƒ‘แƒฃแƒ“แƒ”:

// แƒฉแƒ•แƒ”แƒœ แƒ•แƒ?แƒฌแƒงแƒ”แƒ‘แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒ?แƒ— แƒ“แƒ แƒแƒจแƒ แƒ แƒแƒ› Windows แƒ’แƒแƒ›แƒแƒ?แƒงแƒ”แƒœแƒ”แƒ‘แƒก, แƒ แƒแƒ—แƒ แƒ“แƒแƒ’แƒ•แƒ?แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ“แƒ?แƒ—, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ แƒแƒฆแƒแƒช แƒฎแƒ“แƒ”แƒ‘แƒ,

#แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก THERE_WAS_A_SOCKET_EVENT WM_USER + 100 // WM_USER แƒแƒ แƒ?แƒก แƒ‘แƒแƒ–แƒ แƒกแƒแƒ‘แƒแƒŸแƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ?แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ?

// แƒกแƒแƒ“แƒฆแƒแƒช แƒฉแƒ•แƒ”แƒœแƒ? แƒ?แƒœแƒ?แƒชแƒ?แƒแƒšแƒ?แƒ–แƒแƒชแƒ?แƒ?แƒกแƒแƒก แƒ™แƒแƒ“แƒ? แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ CreateWindow (), แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ•แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ— WSAAsyncSelect ()

WSAAsyncSelect ( theSocket, hwnd, THERE_WAS_A_SOCKET_EVENT, FD_READ | FD_WRITE | FD_CONNECT | ... );



// แƒ”แƒก แƒ?แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ”แƒ‘แƒ: Windows, แƒ’แƒ—แƒฎแƒแƒ•แƒ—, แƒ“แƒแƒ›แƒ?แƒ™แƒแƒ•แƒจแƒ?แƒ แƒ“แƒ”แƒก THERE_WAS_A_SOCKET_EVENT แƒ“แƒ แƒแƒจแƒ, แƒ แƒแƒ› แƒ›แƒ”

// แƒฌแƒ?แƒœแƒแƒกแƒฌแƒแƒ  แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒฃแƒšแƒ? แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?, แƒ แƒแƒ› แƒฌแƒแƒ•แƒ?แƒ™แƒ?แƒ—แƒฎแƒ” (FD_READ), แƒแƒœ แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒ” แƒ•แƒแƒ , แƒฃแƒคแƒแƒกแƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?แƒก

// (FD_WRITE), แƒแƒœ แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ›แƒ” แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ?แƒ— แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒ•แƒ?แƒœแƒ›แƒ” (FD_CONNECT), แƒแƒœ แƒ›แƒแƒจแƒ?แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ.แƒจ....

// แƒฉแƒ•แƒ”แƒœแƒ? แƒคแƒแƒœแƒฏแƒแƒ แƒ แƒžแƒ แƒแƒชแƒ”แƒ“แƒฃแƒ แƒ (แƒคแƒฃแƒœแƒฅแƒชแƒ?แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ?แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ?, แƒ แƒแƒ› Windows แƒแƒ’แƒ–แƒแƒ•แƒœแƒ?แƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒ? app)

LRESULT WINAPI TheWindowProcedure ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )

{



 switch ( msg )

{

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? THERE_WAS_A_SOCKET_EVENT:

 แƒ—แƒฃ ( WSAGETSELECTERROR ( lParam ) )

 { // แƒ—แƒฃ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ›แƒแƒฎแƒ“แƒ,

 closesocket ( theSocket );

 WSACleanup (); // แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ Winsock

 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ NETWORK_ERROR;

}

 switch ( WSAGETSELECTEVENT ( lParam ) )

 { // แƒ—แƒฃ แƒ แƒ แƒ›แƒแƒฎแƒ“แƒ แƒ–แƒฃแƒกแƒขแƒแƒ“?

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? FD_READ:

 // แƒ›แƒ?แƒฆแƒ”แƒ‘แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? FD_WRITE:

 // แƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ—แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ?

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? FD_CONNECT:

 // แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ?แƒ แƒ”แƒ‘แƒฃแƒšแƒ? แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

 แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? ... // แƒ?แƒ’แƒ?แƒ•แƒ” แƒ™แƒแƒœแƒคแƒ?แƒ’แƒฃแƒ แƒแƒชแƒ?แƒ แƒกแƒฎแƒ•แƒ แƒ“แƒ แƒแƒจแƒ”แƒ‘แƒ?

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;

}

แƒจแƒ”แƒกแƒ•แƒ”แƒœแƒ”แƒ‘แƒ;



 // แƒกแƒฎแƒ•แƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ? แƒ’แƒแƒœแƒชแƒฎแƒแƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ? แƒšแƒแƒ’แƒ?แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ?แƒช แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก แƒกแƒฎแƒ•แƒ Windows แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ?แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ?



}

}

แƒ’แƒแƒ?แƒ—แƒ•แƒแƒšแƒ?แƒกแƒฌแƒ?แƒœแƒ”แƒ—, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒ•แƒ”แƒ  แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒ”แƒ แƒ—แƒ? แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒ—แƒ?แƒ—แƒแƒ”แƒฃแƒšแƒ? แƒ›แƒแƒ•แƒšแƒ”แƒœแƒ, แƒ แƒแƒ’แƒแƒ แƒ?แƒชแƒแƒ SOCKET_GOTMSG แƒ?แƒงแƒ?แƒ“แƒ”แƒ‘แƒ FD_READ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ SOCKET_CONNECTED แƒ?แƒงแƒ?แƒ“แƒ”แƒ‘แƒ FD_CONNECT. แƒ”แƒก แƒ?แƒ›แƒ?แƒขแƒแƒ›, แƒ แƒแƒ› แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ?แƒ—แƒ? แƒ–แƒแƒ แƒ”แƒ‘แƒ? WSAAsyncSelect () แƒ™แƒแƒœแƒคแƒ?แƒ’แƒฃแƒ แƒแƒชแƒ?แƒ แƒ—แƒ?แƒ—แƒแƒ”แƒฃแƒšแƒ? แƒ“แƒ แƒแƒจแƒ แƒ?แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒแƒกแƒฃแƒฎแƒ?แƒก แƒ”แƒคแƒ”แƒฅแƒขแƒ? แƒ‘แƒแƒšแƒ แƒ–แƒแƒ แƒ? WSAAsyncSelect ().

แƒฃแƒคแƒ แƒ แƒ’แƒแƒ™แƒ•แƒ”แƒ—แƒ?แƒšแƒ”แƒ‘แƒ? แƒ“แƒ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ?

แƒ›แƒ” แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒแƒ› tutorial แƒฌแƒšแƒ?แƒก แƒ“แƒ”แƒ™แƒ”แƒ›แƒ‘แƒ”แƒ แƒจแƒ?, 2000, แƒ“แƒ แƒจแƒ•แƒ?แƒ“แƒ? แƒแƒœ แƒ?แƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒฌแƒšแƒ?แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ  แƒ›แƒ?แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒฃแƒ“แƒ›แƒ?แƒ•แƒ? แƒœแƒแƒ™แƒแƒ“แƒ? แƒกแƒ?แƒ แƒ“แƒ แƒ’แƒแƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ”แƒ‘แƒ. แƒ›แƒ” แƒ?แƒ›แƒ”แƒ“แƒ? แƒ›แƒแƒฅแƒ•แƒก, แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ“แƒ แƒ™แƒ?แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒ” แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ“แƒ แƒฌแƒ”แƒ แƒ: แƒ’แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ—, แƒ แƒแƒ› แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒแƒ‘แƒ— Johnnie แƒ?แƒก Winsock Tutorial. แƒ–แƒ”แƒ›แƒแƒ— แƒแƒ แƒ?แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒแƒ™แƒšแƒ” แƒ›แƒ?แƒ›แƒแƒฎแƒ?แƒšแƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ?, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ?แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒ?แƒแƒฆแƒฌแƒ?แƒแƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ?แƒ— Winsock แƒ“แƒ แƒกแƒฎแƒ•แƒ”แƒ‘แƒ? แƒแƒ  แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ, แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒ™แƒ”แƒ—, แƒ•แƒ?แƒ“แƒ แƒ” แƒฉแƒ”แƒ›แƒ—แƒ•แƒ?แƒก แƒกแƒแƒชแƒ“แƒ”แƒšแƒ? แƒกแƒžแƒ”แƒชแƒ?แƒคแƒ?แƒ™แƒ แƒแƒ› แƒ—แƒ”แƒ›แƒแƒ–แƒ”:

(แƒแƒ›แƒแƒซแƒ แƒแƒ•แƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ? แƒ›แƒแƒฃแƒกแƒ?แƒก แƒ›แƒ”แƒขแƒ? แƒฌแƒ?แƒ’แƒœแƒ?แƒก แƒงแƒ“แƒ แƒ›แƒ”แƒขแƒ? แƒ?แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ?แƒ.)
– See more at: http://johnnie.jerrata.com/winsocktutorial/#sthash.IMglbIzP.dpuf

Home | Cute Girls | Sunset Images