资源描述:
《一个简单的客户端和服务器通讯.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、LinuxÍøÂç±à³Ì£¼òµ¥µÄ¿Í»§¶ËºÍ·þÎñÆ÷ͨѶ³ÌÐò¿ª·¢ÈëÃÅ£¨2£©?007-09-1921:15:32·ÖÀࣺ C/C++zieckey£À..cn¼ò½é£º±¾ÎÄÏêϸ½éÉÜÁËLinuxÏÂB£¯S½á¹¹µÄ¿Í»§¶Ë·þÎñÆ÷ͨѶ³ÌÐòµÄ¿ª·¢ÈëÃÅ£¬ÆäÖжÔÖØÒªµÄÍøÂ纯ÊýºÍ½á¹¹Ìå×÷ÁËÏêϸµÄ˵Ã÷ºÍ·ÖÎö£¬×îºó¸ø³öÒ»¸ö¼òµ¥µÄ¿Í»§¶ËºÍ·þÎñÆ÷ͨѶ³
2、ÌÐòʾÀýÒÔ¼ÓÉîÀí½â¡£2.³õµÈÍøÂ纯Êý½éÉÜ£¨TCP£©LinuxϵͳÊÇͨ¹ýÌṩÌ×½Ó×Ö(socket)À´½øÐÐÍøÂç±à³ÌµÄ.ÍøÂç³ÌÐòͨ¹ýsocketºÍÆäËü¼¸¸öº¯ÊýµÄµ÷ÓÃ,»á·µ»ØÒ»¸öͨѶµÄÎļþÃèÊö·û,ÎÒÃÇ¿ÉÒÔ½«Õâ¸öÃèÊö·û¿´³ÉÆÕͨµÄÎļþµÄÃèÊö·ûÀ´²Ù×÷,Õâ¾ÍÊÇlinuxµÄÉ豸ÎÞ¹ØÐԵĺô¦.ÎÒÃÇ¿ÉÒÔͨ¹ýÏòÃ
3、èÊö·û¶Áд²Ù×÷ʵÏÖÍøÂçÖ®¼äµÄÊý¾Ý½»Á÷.2.1socketintsocket(intdomain,inttype,intprotocol)domain:˵Ã÷ÎÒÃÇÍøÂç³ÌÐòËùÔÚµÄÖ÷»ú²ÉÓõÄͨѶÐ×å(AF_UNIXºÍAF_INETµÈ).?AF_UNIXÖ»Äܹ»ÓÃÓÚµ¥Ò»µÄUnixϵͳ½ø³Ì¼äͨÐÅ,¶øAF_INETÊÇÕë¶ÔInternetµÄ,Òò¶ø¿ÉÒÔÔÊÐíÔÚÔ¶³ÌÖ÷»úÖ®¼äͨÐÅ(µ±
4、ÎÒÃÇmansocketʱ·¢ÏÖdomain¿ÉÑ¡ÏîÊÇPF_*¶ø²»ÊÇAF_*,ÒòΪglibcÊÇposixµÄʵÏÖËùÒÔÓÃPF´úÌæÁËAF,²»¹ýÎÒÃǶ¼¿ÉÒÔʹÓõÄ).type:ÎÒÃÇÍøÂç³ÌÐòËù²ÉÓõÄͨѶÐÒé(SOCK_STREAM,SOCK_DGRAMµÈ)SOCK_STREAM±íÃ÷ÎÒÃÇÓõÄÊÇTCPÐÒé,ÕâÑù»áÌṩ°´Ë³ÐòµÄ,¿É¿¿,Ë«Ïò,ÃæÏòÁ¬½ÓµÄ±ÈÌØÁ÷.SOCK_DGRA
5、M±íÃ÷ÎÒÃÇÓõÄÊÇUDPÐÒé,ÕâÑùÖ»»áÌṩ¶¨³¤µÄ,²»¿É¿¿,ÎÞÁ¬½ÓµÄͨÐÅ.protocol:ÓÉÓÚÎÒÃÇÖ¸¶¨ÁËtype,ËùÒÔÕâ¸öµØ·½ÎÒÃÇÒ»°ãÖ»ÒªÓÃ0À´´úÌæ¾Í¿ÉÒÔÁËsocketΪÍøÂçͨѶ×ö»ù±¾µÄ×¼±¸.³É¹¦Ê±·µ»ØÎļþÃèÊö·û,ʧ°Üʱ·µ»Ø-1,¿´error¿ÉÖªµÀ³ö´íµÄÏêϸÇé¿ö.2.2bind?Ò»µ©ÄãÓÐÒ»¸öÌ×½Ó×Ö,Äã¿ÉÄÜ
6、Òª½«Ì×½Ó×ֺͻúÆ÷ÉϵÄÒ»¶¨µÄ¶Ë¿Ú¹ØÁªÆðÀ´¡£(Èç¹ûÄãÏëÓÃlisten()À´ÕìÌýÒ»¶¨¶Ë¿ÚµÄÊý¾Ý,ÕâÊDZØÒªÒ»²½)Èç¹ûÄãÖ»ÏëÓÃconnect(),ÄÇôÕâ¸ö²½ÖèûÓбØÒª¡£µ«ÊÇÎÞÂÛÈçºÎ,Çë¼ÌÐø¶ÁÏÂÈ¥¡£ÕâÀïÊÇϵͳµ÷ÓÃbind()µÄ´ó¸Å:intbind(intsockfd,structsockaddr*my_addr,intaddrlen)sockfd:ÊÇÓÉ
7、socketµ÷Ó÷µ»ØµÄÎļþÃèÊö·û.addrlen:ÊÇsockaddr½á¹¹µÄ³¤¶È.my_addr:ÊÇÒ»¸öÖ¸ÏòsockaddrµÄÖ¸Õë.ÔÚÖÐÓÐsockaddrµÄ¶¨Òåstructsockaddr{unisgnedshortas_family;charsa_data[14];};²»¹ýÓÉÓÚϵͳµÄ¼æÈÝÐÔ,ÎÒÃÇÒ»°ã²»ÓÃÕâ¸öÍ·Îļþ,¶øʹÓÃÁíÍâÒ»¸ö½á¹¹(structsockaddr_in)À´´úÌæ.Ô
8、ÚÖÐÓÐsockaddr_inµÄ¶¨Òåstructsockaddr_in{unsignedshortsin_family;unsignedshortintsin_port;structin_addrsin_addr;unsignedcharsin_zero[8];}ÎÒÃÇÖ÷ҪʹÓÃInternetËùÒÔsin_familyÒ»°ãΪAF_INET,sin_addrÉèÖÃΪINADDR_ANY±íʾ¿ÉÒÔºÍÈκÎ