¹êÅç¤@¡B¤å¦r²á¤Ñ«Ç
¹êÅçn¨D¡G
¥»¹êÅç¥Dn¬O§Q¥Î¥D±q¦¡¬[ºc¡Aconnection-oriented³sµ²¤è¦¡¡A¼¶¼g¤@Ó¦h¸s²Õ²á¤Ñ«Ç¡C
½Ð¤Å¨Ï¥Î¦p BCB6, VC++¤¤²{¦¨ªººô¸ô¤¸¥ó¡A¥Î¤áºÝ©M¦øªA¾¹ºÝ¶¡¤§³q°Tn¦Û¤v¼g¡C
µ{¦¡¤¤n¦³ÁקKblockingªº¯à¤O¡A¥t¥~¡A
¥Î¤áºÝ¥²»Ý¨ã³Æ¤U¦C¥\¯à¡G
1. ¥i¥H©M²á¤Ñ«Ç¦øªA¾¹«Ø¥ß³s½u¤Î¤ÁÂ_³s½u¡C
2. ¨Ï¥ÎªÌ¥i¥H¶}±Ò¤@Ó¥H¤Wªº²á¤Ñ«Ç¡C
3. ¨Ï¥ÎªÌ¥i¥H°ÊºA°Ñ¥[©ÎÂ÷¶}¤@өΦhÓ¸s²Õ¡C
4. ¨Ï¥ÎªÌ¥i¥H±oª¾¨C¤@Ó¸s²Õ¤¤¨ä¥L¤Hªº¨¥÷¡A¨Ã¬Ý¨ì¦P¸s²Õ¤¤¨ä¥L¤H°e¥Xªº°T®§(¨S¦³°Ñ¥[¸s²Õªº°T®§·íµM¬O¬Ý¤£¨ìªº)¡A¥ç¥i°e°T®§¦Ü¦³°Ñ¥[ªº¥ô¤@¸s²Õ¡C
¦øªA¾¹ºÝ¡G
1. ¥i¥H±µ¨ü¥Î¤áºÝªº«Ø¥ß³s½u½Ð¨D¡A¤]¥i¥HÀH®É¤ÁÂ_³s½u¡C
2. ¥i¥H±µ¨ü¥Î¤áºÝ°ÊºA¥[¤J¡BÂ÷¶}¡B©Î¶}±Ò¬YÓ¸s²Õ¡C
3. ¦¬¨ì¬YӥΤáºÝ°e¨ì¬Y¸s²Õªº°T®§®É¡At³d±N¨ä¶Çµ¹¦P¤@¸s²Õªº¨ä¥L¥Î¤áºÝ¡A¨Ï±o°Ñ¥[¦P¤@¸s²Õªº¤H¥i¥H¬Ý¨ì¨ä¥L¤H°e¥Xªº°T®§¡C
¹w³ø¡]¤£»Ý¼¶¼g¡^»Ý§¹¦¨¡G
1. ¹ê»Ú¤U¸ü¨Ã¨Ï¥ÎMSN Messenger Live³nÅé¡A¨Ã±N§U±Ð(¦¬´Moops@cobra.ee.ntu.edu.tw)»P²Õû³]¦¨¦n¤Í¡C
2.
¨Ï¥ÎMSN Messenger¡A¸ò§U±Ð²á¤@¤U¡A¤¶²Ð¤@¤U¦Û¤v¡C
¹êÅç¥Øªº¡G
1. »{ÃѨüô±x Windows
Sockets API¡C
2.
§Q¥Î Windows Sockets API ¥H¤Î²©ö Windows programming§Þ¥©¼¶¼g¤@Ó¥D±q¦¡¬[ºcªº¦h¸s²Õ²á¤Ñ«Ç¡C
¹êÅç³]³Æ¡G
µwÅé¡G³£¦³ºô¸ô¥d¬Û³sªº¨â¥x¹q¸£¡C
³nÅé¡G¥ô¦óµøµ¡µ{¦¡¶}µo³nÅé¡A¦pdotNET¡BVisual C++¡BBorland C++ Builder¡BVisual Basic¡B¡Èµ¥¡C
¹êÅç«Ç¥t¦³´£¨ÑMicrosoft
Developer Network (MSDN) LibraryÅý¦P¾Ç¨Ï¥Î¡C
¹êÅçì²z¡G
1. ¦ó¿×socket
±qºô¸ôªº¨¤«×¨Ó¬Ý¡Asocket´N¬O³q°T³sµ²ªººÝÂI¡F±qµ{¦¡³]pªÌªº¨¤«×¨Ó¬Ý¡Asocket´£¨Ñ¤F¤@Ó¨}¦nªº¤¶±¨Ïµ{¦¡³]pªÌ¤£»Ýª¾¹D¤U¼hºô¸ô¨ó©w¹B§@ªº²Ó¸`«K¥i¥H¼¶¼gºô¸ô³q°Tµ{¦¡¡C
Windows Socket¬O¥H¹ê§@©óBerkeley Software Distribution (BSD, release
4.3)¤¤ªºUNIX sockets¬°°ò¦©Òµo®i¥X¨Óªº¤@®MAPI¡A¨ä¤£¶È¤ä´©
TCP/IP¡A¹ï©óXeroxR Network System (XNS), Digital Equipment
Corporation¡¦s DECNet protocol, NovellR Corporation¡¦s Internet Packet Exchange/Sequenced Packed
Exchange(IPX/SPX)¥ç¥i¥H¤ä´©¡C¦¹¥~¤]´£¨Ñ¾÷¾¹½Xªº¬Û®e©Ê¡A¦]¦¹¦b¤£¦Pªº§@·~¨t²Î¤W²¾´Ó®É¨Ã¤£»Ýn°µ¥ô¦óקï¡C
Windows Socket API¬O¤@®M°ÊºA³sµ²¨ç¦¡®w(DLL)¡A§Yµ{¦¡¦b½sĶ®É´Á¨Ã¤£·|©M³o¨Ç¨ç¦¡®w³sµ²¡A¦Ó¬Oµ¥¨ì°õ¦æ´Á¶¡¤~·|©I¥s³o¨ç¦¡¡C
2. Socketsªº¤ÀÃþ
¦bTCP/IP¬[ºc¤U¡Asockets¥i¤À¬°¤U±¨âÃþ¡G
(1) Datagram sockets (connectionless)
¸ê®Æ¦bdatagram sockets¶¡¬O§Q¥ÎUDP«Ê¥]¶Ç°e¡A¦]¦¹±µ¦¬ºÝsocket¥i¯à·|¦¬¨ì¦¸§Ç¿ù»~ªº¸ê®Æ¡A¥B¨ä¤¤³¡¤À¸ê®Æ¥ç¥i¯à·|¿ò¥¢¡C
(2) Stream sockets (connection-oriented)
¸ê®Æ¦bstream sockets¶¡¬O§Q¥ÎTCP«Ê¥]¨Ó¶Ç°e¡A¦]¦¹±µ¦¬ºÝ socket ¥i¥H¦¬¨ì¶¶§ÇµL»~¡BµL«ÂСB¥¿½Tªº¸ê®Æ¡C¦¹¥~TCP¶Ç°e®É¬O±Ä¸ê®Æ¬yªº¤è¦¡¡A¦]¦b¶Ç°e®É·|©Ò¦³¸ê®Æ·|µø±¡ªp³Q¤À³Î¦b¼ÆÓ TCP«Ê¥]¤¤¡C
Sockets¦b²£¥Í®É«K»Ý«ü©w¨äºØÃþ¡A¥B°ß¦³¦PÃþ¤§sockets¤~¯à©¼¦¹·¾³q¡C
3. ¥D±q¦¡¬[ºc¼Ò«¬(Client/Server
model)
¨CÓºô¸ôÀ³¥Îµ{¦¡³£¦³¤@Ó³q°TºÝÂI¡A¤@ºØºÝÂI¬O¥Î¤áºÝ¡A¥t¤@ºØ¬O¦øªA¾¹¡C®Ú¾Ú©w¸q¡A¥Î¤áºÝ·|¥ý°e¥X²Ä¤@Ó«Ê¥]¡A¥Ñ¤@Ó¦øªA¾¹±µ¦¬¡C¦bªì¨B±µÄ²«á¡A¥Î¤áºÝ©M¦øªA¾¹§¡¯à¶}©l¦¬°e¸ê®Æ¡C
¨Ì¾Úsocket©Ò´£¨ÑªºªA°È¨Ó±N¥¦¤ÀÃþ¡AµM¦Ó¦b¥Î¤áºÝ©M¦øªA¾¹¤Wªº³o¨âÓsockets¥²¶·¬O¦P¤@Ãþ¤~¯à¤¬¬Û³q°T¡A¤]´N¬O»¡¡A¥LÌ¥²¶·³£¬Ostream (TCP)©Î³£¬Odatagram (UDP)¡C¥Î¤áºÝªºÀ³¥Îµ{¦¡¥²¶·n¯à§ä¨ì¨ÃÃѧO¦øªA¾¹ªºsocket¡A¦Ó¦øªA¾¹·|±N¥¦ªºsocket©R¦W¥HÅý¥Î¤áºÝÃѧO¡A´NTCP/IP¦Ó¨¥¡A¤@Ósocket name¥]¬A¤FIP¦ì§}¡B³sµ²°ð½s¸¹¡B¥H¤Î¨ó©w¥»¨¡C¥Î¤áºÝ¥i¥ÎWindows Socketsªº¦WºÙ¦øªA¨ç¦¡¨Ó¬d¨ì¼Ð·Ç¦øªA¾¹ªº³sµ²°ð½s¸¹¡A¦Ó¦pªGª¾¹D¦øªA¾¹ªº¥D¾÷¦W¡A«h¥i¥HWindows Socketsªº¥D¾÷¦WºÙ¤ÀªR¨ç¦¡¡A¨Ó¬d±o¦øªA¾¹ªºIP¡C·í¥Î¤áºÝsocket¦¨¥\¦aÁpô¤W¦øªA¾¹ºÝ¤§socket«á¡A³o¨âªÌ«K§Î¦¨¤@Ó¡§µ²¦X¡¨
(association)¡C¦b¦¹®É¡A¨CÓsocket³£¥i¥H¥Ñ¥¦ªº¦W¦r¤Î¹ï¤èªº¦W¦r©Ò§Î¦¨ªº²Õ¦X¥[¥HÃѧO¡C³oÓµ²¦X¥]¬A¤Ón¯À¡G©Ò¥Îªº¨ó©w¡B¥Î¤áºÝIP¦ì§}¡B¥Î¤áºÝ³sµ²°ð¸¹½X¡B¦øªA¾¹ºÝIP¦ì§}¡B¦øªA¾¹ºÝ³sµ²°ð¸¹½X¡C³oÓ¡§µ²¦X¡¨ªºÆ[©À¨Ã¤£¥u¬OWindows Socketsµ{¦¡³]pªº°ò¦¡A¥¦¤]¬O¤@¯ëºô¸ô³q°Tªº«nÆ[©À¡C¦bµ²¦X¤¤ªº¸ê°T¥iÃѧO¤Î¤Þ¾É«Ê¥]³q¹Lºô¸ô¡A±q³o¤@ºÝªºµ{¦¡¶Ç¦Ü¥t¤@ºÝ¡C
©Ò¦³ªººô¸ôÀ³¥Îµ{¦¡¬Ò¥i¤À¬°¤Ó¨BÆJ¡G
TCP UDP
¹Ï¤@ socket µ{¦¡Â²¹Ï
u
¶}±Ò¤@ÓSocket
Socket¬O³q°TªººÝÂI¡A¦n¤ñ¬O¹q¸£ªººô¸ô¤¶±¥d¡A¨Ï±oºô¸ôÀ³¥Îµ{¦¡¥i¥H¹³¤¶±¥d´¡¦b¥D¾÷ªO¤W¤@¼Ë¡A´¡¤Jºô¸ô¤¤¡C¤@¯ë»¡¨Ó§A¥u·|¦³¤@¤ùºô¸ô¥d¦b¹q¸£¤¤¡A¦ý¬O§A¥i¥H¦³³\¦hsockets¡A¦Ó¥B¥¦Ì¤]¥i¥H¦P®É¨Ï¥Î¤@¤ùºô¸ô¥d¡C¥Î¤áºÝ»P¦øªA¾¹ºÝ³£»Ýn¤@Ósocket¥H¦s¨úºô¸ô¸ê®Æ¡A¨Ï¥Îsocket() ¨ç¦¡©I¥s´N¥i¶}±Ò¤@Ósocket¡C(¦p¹Ï¤@©Ò¥Ü)
u
¬°Socket©R¦W
¦øªA¾¹ºÝªºµ{¦¡¥²¶·¬°¥¦ªºsocket©R¦W¡A³o¼Ë¥Î¤áºÝ¤~¯à§ä¨ì¨Ã¥¿½T¦a¿ëÃÑ¥X¥¦ªºsocket¡A¦pªG¦øªA¾¹¨S¦³´À¥¦ªºsocket©R¦W¡A«h¨ó©w°ïÅ|·|©Úµ´¥Î¤áºÝn³q°Tªº½Ð¨D¡CnÀ°socket¨ú¦W¥²¶·³]©w¤TӰѼơG¨ó©w¡B³sµ²°ð¸¹½X¡B¤Î¦ì§}¡A¦Ó¥Î¤áºÝ´Nn¥Î³o¨ÇȨөM¦øªA¾¹«Ø¥ß³sµ²¡Cn¬°socket©R¦W¡A¦øªA¾¹¥²¶·¬°socket¦ì§}µ²ºc³]ªì©lȨéI¥sbind()¨ç¦¡¡A¥H«ü©w¥»¨³sµ²°ð¸¹½X©MIP¦ì§}¡A§¹¦¨©R¦Wªº¤u§@¡C
u
»P¥t¤@ÓSocketµ²¦X
°²³]§Ú̦b¥Î¤áºÝ»P¦øªA¾¹ºÝ§¡¶}±Ò¤@Ósocket¡A¨Ã¦Ü¤Ö¬°¦øªA¾¹ºÝªºsocket©R¦W¡C±µ¤U¨Ó¦øªA¾¹n·Ç³Æ±µ¦¬«Ê¥]¡A¦Ó¥Î¤áºÝn·Ç³Æµo°e«Ê¥]¡A·í¦¹·Ç³Æ¤u§@§¹¦¨«á¡A¦¹¨âºÝªºsockets´N¥s«Ø¥ß¤@Ó¡¨µ²¦X¡¨(association)¡C¦p¦ó¬°µ²¦X¦¹¨âºÝªºsocket°µ·Ç³Æ©O? ¦bWinSock
API¤¤´£¨Ñ¤F´XӨ禡¨Ó§¹¦¨¦¹°Ê§@¡C¦b¦øªA¾¹ºÝ«h¥H©I¥s listen()¨Ó·Ç³Æ±µ¨ü¥Î¤áºÝ°e¨Óªº³sµ²n¨D¡A¦pªG¦¬¨ì³s½un¨D¡A«h¶}±Ò¥t¤@Ó·sªº socket ¨Ó©M¥Î¤áºÝ¶i¦æ³s½u(¨Ï¥Îaccept()¨ç¦¡)¡F¦Ó¦b¥Î¤áºÝ«h¬O©I¥sconnect()¨ç¦¡»P¦øªA¾¹ºÝªºsocket§¹¦¨µ²¦X¡C
u
¦bSockets¶¡¦¬°e¸ê®Æ
¦¹®É§Ṳ́w¸g¦b¥Î¤áºÝ©M¦øªA¾¹ªºsockets¶¡«Ø¥ß¤Fµ²¦X¡A¤]´N¬O»¡¡A§Ṳ́w¸g¥i¥H¶}©l¦¬°e¸ê®Æ¤F¡C¦p¦ó¦¬°e¸ê®Æ©O? ¦b¤@Ó¤w³sµ²ªºsocket¤W¦¬°e¸ê®Æ¥i©I¥srecv()»Psend()¨Ó§¹¦¨¡F¦Ó¦b¤@ÓµL³sµ²ªºsocket¤W¦¬°e¸ê®Æ¥i©I¥srecvfrom()»Psendto()¨Ó§¹¦¨¡C
u
Ãö³¬Socket
·í¥Î¤áºÝ§¹¦¨¦¬°e¸ê®Æ¥B©¹«á¨Ã¤£·|¦b¨Ï¥Î®É¡A¥²¶·Ãö³¬socket¡A¹ïTCP
socket¦Ó¨¥¡AÃö³¬socket°£¤F±Nsocketªº¸ê·½ÁÙµ¹¨ó©w°ïÅ|¡A¦¹¥~¨Ã¹Á¸Õ±N¥H«Ø¥ßªº³sµ²Ãö³¬¡C¦ý¹ïUDP socket¦Ó¨¥¡A«h¬O³æ¯Â¦a±N¸ê·½ÁÙµ¹¨ó©w°ïÅ|¡CÃö³¬socket¥i©I¥sclosesocket()¨Ó§¹¦¨¡C
µ²³ø°ÝÃD¡G
1.
½Ð¤À§O±Ôz§A³]p¤§²á¤Ñ«Ç¦øªA¾¹ºÝ»P¥Î¤áºÝ¡]1¡^³W¹º³]p¡]2¡^¹B§@¤è¦¡¡]3¡^¥\¯à¯S¦â¡C
2.
¥»¹êÅ窺²á¤Ñ«Çµ{¦¡¬O¨Ï¥Î¥D±q¦¡¬[ºc¡C§Aı±o¬O§_¦³¨ä¥L¥i¦æªº¤è¦¡¡HY¦³¡A½Ð¥Î¥\¯à¤è¶ô¹Ï»¡©ú±N¦p¦ó¹B§@¡C
3.
½Ð²³æ±Ôzconnection-oriented (TCP)©Mconnectionless
(UDP)¤è¦¡¤§¬yµ{¡C
4.
WinSock
API¤¤¦³³¡¤À¨ã¦³blockingªº¯S©Ê¡A½Ð±Ôz¦¹¤@¯S©Ê¨Ã»¡©ú§A¦p¦ó¸Ñ¨M³oÓ°ÝÃD¡A¬O§_¦³¨ä¥Lªº¸Ñ¨M¤èªk¡H
°Ñ¦Ò¤åÄm¡G
1.
INTERNETWORKING
WITH TCP/IP VOL.3 CLIENT-SERVER PROGRAMMING AND APPLICATIONS Windows Sockets
Version,¡¨ Douglas E. Comer and David L. Stevens, Prentice-Hall
International, Inc.
2.
¡§Windows
Sockets ºô¸ôµ{¦¡³]p¸g¨å¡¨¡A§õ©s®Ñ¡B¶ÀÅb¶WĶ¡A¬ü°Ó·R}¥Í½Ã´µ²z¡BùÖ®p¸ê°TªÑ¥÷¦³¤½¥q¦X§@¥Xª©¡C
3.
¡§WinSockºô¸ôµ{¦¡³]p¤§Æ_¡¨¡A¶À«T³ó¡B¶ÀÄ£¤å¡B³\´ºµØ¡B³¯§µ©¾µÛ¡A¸ê°T¤H¤å¤Æ¨Æ·~