²úÆ··ÖÀà+
TCPºÍUDPµÄÇø±ðºÍÓÅȱµã
Ò»¡¢TCPÓëUDPÇø±ð×ܽ᣺
1¡¢TCPÃæÏòÁ¬½Ó£¨Èç´òµç»°ÒªÏȲ¦ºÅ½¨Á¢Á¬½Ó£©;UDPÊÇÎÞÁ¬½ÓµÄ£¬¼´·¢ËÍÊý¾Ý֮ǰ²»ÐèÒª½¨Á¢Á¬½Ó
2¡¢TCPÌṩ¿É¿¿µÄ·þÎñ¡£Ò²¾ÍÊÇ˵£¬Í¨¹ýTCPÁ¬½Ó´«Ë͵ÄÊý¾Ý£¬ÎÞ²î´í£¬²»¶ªÊ§£¬²»Öظ´£¬ÇÒ°´Ðòµ½´ï;UDP¾¡×î´óŬÁ¦½»¸¶£¬¼´²»±£Ö¤¿É¿¿½»¸¶
Tcpͨ¹ýУÑéºÍ£¬ÖØ´«¿ØÖÆ£¬ÐòºÅ±êʶ£¬»¬¶¯´°¿Ú¡¢È·ÈÏÓ¦´ðʵÏÖ¿É¿¿´«Êä¡£È綪°üʱµÄÖØ·¢¿ØÖÆ£¬»¹¿ÉÒÔ¶Ô´ÎÐòÂÒµôµÄ·Ö°ü½øÐÐ˳Ðò¿ØÖÆ¡£
3¡¢UDP¾ßÓнϺõÄʵʱÐÔ£¬¹¤×÷ЧÂʱÈTCP¸ß£¬ÊÊÓÃÓÚ¶Ô¸ßËÙ´«ÊäºÍʵʱÐÔÓнϸߵÄͨÐÅ»ò¹ã²¥Í¨ÐÅ¡£
4.ÿһÌõTCPÁ¬½ÓÖ»ÄÜÊǵ㵽µãµÄ;UDPÖ§³ÖÒ»¶ÔÒ»£¬Ò»¶Ô¶à£¬¶à¶ÔÒ»ºÍ¶à¶Ô¶àµÄ½»»¥Í¨ÐÅ
5¡¢TCP¶Ôϵͳ×ÊÔ´ÒªÇó½Ï¶à£¬UDP¶Ôϵͳ×ÊÔ´ÒªÇó½ÏÉÙ¡£
¶þ¡¢ÎªÊ²Ã´UDPÓÐʱ±ÈTCP¸üÓÐÓÅÊÆ?
UDPÒÔÆä¼òµ¥¡¢´«Êä¿ìµÄÓÅÊÆ£¬ÔÚÔ½À´Ô½¶à³¡¾°ÏÂÈ¡´úÁËTCP,ÈçʵʱÓÎÏ·¡£
£¨1£©ÍøËÙµÄÌáÉý¸øUDPµÄÎȶ¨ÐÔÌṩ¿É¿¿ÍøÂç±£ÕÏ£¬¶ª°üÂʺܵͣ¬Èç¹ûʹÓÃÓ¦ÓòãÖØ´«£¬Äܹ»È·±£´«ÊäµÄ¿É¿¿ÐÔ¡£
£¨2£©TCPΪÁËʵÏÖÍøÂçͨÐŵĿɿ¿ÐÔ£¬Ê¹ÓÃÁ˸´ÔÓµÄÓµÈû¿ØÖÆËã·¨£¬½¨Á¢ÁË·±ËöµÄÎÕÊÖ¹ý³Ì£¬ÓÉÓÚTCPÄÚÖõÄϵͳÐÒéÕ»ÖУ¬¼«ÄÑ¶ÔÆä½øÐиĽø¡£
²ÉÓÃTCP£¬Ò»µ©·¢Éú¶ª°ü£¬TCP»á½«ºóÐøµÄ°ü»º´æÆðÀ´£¬µÈÇ°ÃæµÄ°üÖØ´«²¢½ÓÊÕµ½ºóÔÙ¼ÌÐø·¢ËÍ£¬ÑÓʱ»áÔ½À´Ô½´ó£¬»ùÓÚUDP¶ÔʵʱÐÔÒªÇó½ÏΪÑϸñµÄÇé¿öÏ£¬²ÉÓÃ×Ô¶¨ÒåÖØ´«»úÖÆ£¬Äܹ»°Ñ¶ª°ü²úÉúµÄÑÓ³Ù½µµ½×îµÍ£¬¾¡Á¿¼õÉÙÍøÂçÎÊÌâ¶ÔÓÎÏ·ÐÔÔì³ÉÓ°Ïì¡£
Èý¡¢UDPºÍTCP±à³Ì²½ÖèÒ²ÓÐЩ²»Í¬£¬ÈçÏ£º
TCP:
TCP±à³ÌµÄ·þÎñÆ÷¶ËÒ»°ã²½ÖèÊÇ£º
¡¡¡¡1¡¢´´½¨Ò»¸ösocket£¬Óú¯Êýsocket()£» SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
¡¡¡¡2¡¢ÉèÖÃsocketÊôÐÔ£¬Óú¯Êýsetsockopt(); * ¿ÉÑ¡
¡¡¡¡3¡¢°ó¶¨IPµØÖ·¡¢¶Ë¿ÚµÈÐÅÏ¢µ½socketÉÏ£¬Óú¯Êýbind(); SOCKET_ERROR = bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))
¡¡¡¡4¡¢¿ªÆô¼àÌý£¬Óú¯Êýlisten()£» SOCKET_ERROR == listen(SocketListen,2)
¡¡¡¡5¡¢½ÓÊÕ¿Í»§¶ËÉÏÀ´µÄÁ¬½Ó£¬Óú¯Êýaccept()£» SOCKET SocketWaiter = accept(SocketListen,
_Out_ struct sockaddr *addr
_Inout_ int *addrlen);
¡¡¡¡6¡¢ÊÕ·¢Êý¾Ý£¬Óú¯Êýsend()ºÍrecv()£¬»òÕßread()ºÍwrite();
¡¡¡¡7¡¢¹Ø±ÕÍøÂçÁ¬½Ó£» closesocket(SocketListen);closesocket(SocketWaiter);
¡¡¡¡8¡¢¹Ø±Õ¼àÌý£»
SOCK_STREAMÕâÖÖµÄÌØµãÊÇÃæÏòÁ¬½ÓµÄ£¬¼´Ã¿´ÎÊÕ·¢Êý¾Ý֮ǰ±ØÐëͨ¹ýconnect½¨Á¢Á¬½Ó£¬¶øSOCK_DGRAMÕâÖÖÊÇUser Datagram ProtocolÐÒéµÄÍøÂçͨѶ£¬ËüÊÇÎÞÁ¬½ÓµÄ£¬²»¿É¿¿µÄ¡£
TCP±à³ÌµÄ¿Í»§¶ËÒ»°ã²½ÖèÊÇ£º
¡¡¡¡1¡¢´´½¨Ò»¸ösocket£¬Óú¯Êýsocket()£»
¡¡¡¡2¡¢ÉèÖÃsocketÊôÐÔ£¬Óú¯Êýsetsockopt();* ¿ÉÑ¡
¡¡¡¡3¡¢°ó¶¨IPµØÖ·¡¢¶Ë¿ÚµÈÐÅÏ¢µ½socketÉÏ£¬Óú¯Êýbind();* ¿ÉÑ¡
¡¡¡¡4¡¢ÉèÖÃÒªÁ¬½ÓµÄ¶Ô·½µÄIPµØÖ·ºÍ¶Ë¿ÚµÈÊôÐÔ£»
¡¡¡¡5¡¢Á¬½Ó·þÎñÆ÷£¬Óú¯Êýconnect()£»
¡¡¡¡6¡¢ÊÕ·¢Êý¾Ý£¬Óú¯Êýsend()ºÍrecv()£¬»òÕßread()ºÍwrite();
¡¡¡¡7¡¢¹Ø±ÕÍøÂçÁ¬½Ó£»
int send(
_In_ SOCKET s, //ÏòÄĸösocket·¢ËÍ£¬accept·µ»ØµÄsocket¡£
_In_ const char *buf,
_In_ int len,
_In_ int flags
); ÓÉÓÚ
send(SocketClient,(const char *)&fh,sizeof(fh),0);
recv(SocketClient,szbuf,sizeof(szbuf),0);
UDP:
ÓëÖ®¶ÔÓ¦µÄUDP±à³Ì²½ÖèÒª¼òµ¥Ðí¶à£¬·Ö±ðÈçÏ£º
¡¡¡¡UDP±à³ÌµÄ·þÎñÆ÷¶ËÒ»°ã²½ÖèÊÇ£º
¡¡¡¡1¡¢´´½¨Ò»¸ösocket£¬Óú¯Êýsocket()£»
¡¡¡¡2¡¢ÉèÖÃsocketÊôÐÔ£¬Óú¯Êýsetsockopt();* ¿ÉÑ¡
¡¡¡¡3¡¢°ó¶¨IPµØÖ·¡¢¶Ë¿ÚµÈÐÅÏ¢µ½socketÉÏ£¬Óú¯Êýbind();
¡¡¡¡4¡¢Ñ»·½ÓÊÕÊý¾Ý£¬Óú¯Êýrecvfrom();
¡¡¡¡5¡¢¹Ø±ÕÍøÂçÁ¬½Ó£»
UDP±à³ÌµÄ¿Í»§¶ËÒ»°ã²½ÖèÊÇ£º
¡¡¡¡1¡¢´´½¨Ò»¸ösocket£¬Óú¯Êýsocket()£»
¡¡¡¡2¡¢ÉèÖÃsocketÊôÐÔ£¬Óú¯Êýsetsockopt();* ¿ÉÑ¡
¡¡¡¡3¡¢°ó¶¨IPµØÖ·¡¢¶Ë¿ÚµÈÐÅÏ¢µ½socketÉÏ£¬Óú¯Êýbind();* ¿ÉÑ¡
¡¡¡¡4¡¢ÉèÖöԷ½µÄIPµØÖ·ºÍ¶Ë¿ÚµÈÊôÐÔ;
¡¡¡¡5¡¢·¢ËÍÊý¾Ý£¬Óú¯Êýsendto();
¡¡¡¡6¡¢¹Ø±ÕÍøÂçÁ¬½Ó£»
int recvfrom(
_In_ SOCKET s, //°ó¶¨µÄsocket
_Out_ char *buf,
_In_ int len,
_In_ int flags,
_Out_ struct sockaddr *from, //ÓÃÀ´½ÓÊÕ¶Ô·½µÄ
_Inout_opt_ int *fromlen
);
int nres=recvfrom(pThis->m_socketListen,szBuf,sizeof(szBuf),0,(sockaddr*)&addrClient,&nSize);//0´¦±ê־λ
sendto(m_socketListen,szBuffer,nSize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))
TCPºÍUDPÊÇOSIÄ£ÐÍÖеÄÔËÊä²ãÖеÄÐÒé¡£TCPÌṩ¿É¿¿µÄͨÐÅ´«Ê䣬¶øUDPÔò³£±»ÓÃÓÚÈù㲥ºÍϸ½Ú¿ØÖƽ»¸øÓ¦ÓõÄͨÐÅ´«Êä¡£
4¡¢½«socketÉèÖÃΪ¹ã²¥ÊôÐÔ
bool optval=true;
setsockopt(m_socketListen,SOL_SOCKET,SO_BROADCAST,(const char *)&optval,sizeof(bool));
5¡¢½«SocketÉèÖÃΪ·Ç×èÈû¡£
//bool benable=true;
//ioctlsocket(m_socketListen,FIONBIO,(u_long*)&benable);
6¡¢TcpÍ·£¬20×Ö½Ú
7¡¢UDPÊײ¿,8¸ö×Ö½Ú