Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
socket±à³Ì֮ʵÏÖÒ»¸ö¼òµ¥µÄTCPͨÐÅ
 
  2214  次浏览      31
 2019-3-29 
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚcsdn£¬Ö÷Òª½²½âsocketµÄ»ù±¾¸ÅÄTCPЭÒéͨѶÁ÷³ÌÒÔ¼°sockaddrÊý¾Ý½á¹¹µÈÏà¹ØÄÚÈÝ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

Ò»¡¢Àí½âsocket

1¡¢socket¼´ÎªÌ×½Ó×Ö£¬ÔÚTCP/IPЭÒéÖУ¬¡°IPµØÖ·+TCP»òUDP¶Ë¿ÚºÅ¡±Î¨Ò»µÄ±êÊ¶ÍøÂçͨѶÖеÄÒ»¸ö½ø³Ì£¬¡°IPµØÖ·+TCP»òUDP¶Ë¿ÚºÅ¡±¾ÍΪsocket¡£

2¡¢ÔÚTCPЭÒéÖУ¬½¨Á¢Á¬½ÓµÄÁ½¸ö½ø³Ì£¨¿Í»§¶ËºÍ·þÎñÆ÷£©¸÷×ÔÓÐÒ»¸ösocketÀ´±êʶ£¬ÔòÕâÁ½¸ösocket×é³ÉµÄsocket pair¾ÍΨһ±êʶһ¸öÁ¬½Ó¡£

3¡¢socket±¾Éí¾ÍÓС°²å×ù¡±µÄÒâ˼£¬Òò´ËÓÃÀ´ÐÎÈÝÍøÂçÁ¬½ÓµÄÒ»¶ÔÒ»¹ØÏµ£¬ÎªTCP/IPЭÒéÉè¼ÆµÄÓ¦Óòã±à³Ì½Ó¿Ú³ÆÎªsocket API¡£

¶þ¡¢ÍøÂç×Ö½ÚÐò

ÄÚ´æÖеĶà×Ö½ÚÊý¾Ý¶¼ÓдóС¶ËÖ®·Ö£¬´ÅÅÌÎļþÖеĶà×Ö½ÚÊý¾ÝÏà¶ÔÓÚÎļþÖÐµÄÆ«ÒƵØÖ·Ò²ÓдóС¶ËÖ®·Ö£¬Í¬Ñù£¬ÍøÂçÊý¾ÝÁ÷Ò²ÓдóС¶ËÖ®·Ö¡£

ÍøÂçÊý¾ÝÁ÷µÄµØÖ·¹æ¶¨£ºÏÈ·¢³öµÄÊý¾ÝʱµÍµØÖ·£¬ºó·¢³öµÄÊý¾ÝÊǸߵØÖ·¡£·¢ËÍÖ÷»úͨ³£½«·¢ËÍ»º³åÇøÖеÄÊý¾Ý°´ÄÚ´æµØÖ·´ÓµÍµ½¸ßµÄ˳Ðò·¢³ö£¬ÎªÁ˲»Ê¹Êý¾ÝÁ÷ÂÒÐò£¬½ÓÊÕÖ÷»úÒ²»á°Ñ´ÓÍøÂçÉϽÓÊÕµÄÊý¾Ý°´ÄÚ´æµØÖ·´ÓµÍµ½¸ßµÄ˳Ðò±£´æÔÚ½ÓÊÕ»º³åÇøÖС£

TCP/IPЭÒ鹿¶¨£ºÍøÂçÊý¾ÝÁ÷Ó¦²ÉÓôó¶Ë×Ö½ÚÐò£¬¼´µÍµØÖ·¸ß×Ö½Ú¡£

ÓÉÓÚÁ½¶ËµÄÁ½¸öÖ÷»úµÄ´óС¶Ë²»Ò»¶¨Ïàͬ£¬Òò´ËΪÁËʹÕâÐ©ÍøÂçÊý¾Ý¾ßÓиüÇ¿µÄ¿ÉÒÆÖ²ÐÔ£¬Ê¹ÏàͬµÄ´úÂëÔÚ´ó¶ËºÍС¶ËÖ÷»úÉ϶¼ÄÜÕý³£ÔËÐУ¬ÎÒÃÇ¿ÉÒÔµ÷ÓÃÒÔÏ¿⺯Êý½øÐÐÍøÂç×Ö½ÚÐòºÍÖ÷»ú×Ö½ÚÐòµÄÏà¹Ø×ª»»£º

#include<arpa/inet.h>
//½«Ö÷»ú×Ö½ÚÐòת»»ÎªÍøÂç×Ö½ÚÐò
uint32_t htonl(uint32_t hostlong);//½«32³¤ÕûÊý´ÓÖ÷»ú×Ö½ÚÐòת»»ÎªÍøÂç×Ö½ÚÐò£¬
//Èç¹ûÖ÷»ú×Ö½ÚÐòÊÇС¶Ë£¬Ôòº¯Êý»á×öÏàÓ¦´óС
//¶Ëת»»ºó·µ»Ø£»Èç¹ûÖ÷»ú×Ö½ÚÐòÊÇ´ó¶Ë£¬Ôòº¯
//Êý²»×öת»»£¬½«²ÎÊýÔ­·â²»¶¯·µ»Ø¡£¡£¡£ÏÂͬ
uint16_t htons(uint16_t hostshort);
//½«ÍøÂç×Ö½ÚÐòת»»ÎªÖ÷»ú×Ö½ÚÐò
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
// h±íʾÖ÷»ú£¨host£©£¬n±íÊ¾ÍøÂ磨net£©£¬l±íʾ32볤ÕûÊý£¬s±íʾ16¶ÌÕûÊý¡£

Èý¡¢TCPЭÒéͨѶµÄʵÏÖ

TCPЭÒéͨѶÁ÷³Ì£º

ÎÒÃÇÏȽéÉܼ¸¸öº¯Êý£º

1¡¢´´½¨Ì×½Ó×Ö

int socket(int domain,int type,int protocol);
//domain:¸Ã²ÎÊýÒ»°ã±»ÉèÖÃΪAF_INET£¬±íʾʹÓõÄÊÇIPv4µØÖ·¡£»¹Óиü¶àÑ¡Ïî¿ÉÒÔÀûÓÃman²é¿´¸Ãº¯Êý
//type:¸Ã²ÎÊýÒ²ÓкܶàÑ¡ÏÀýÈçSOCK_STREAM±íÊ¾ÃæÏòÁ÷µÄ´«ÊäЭÒ飬SOCK_DGRAM±íʾÊý¾Ý±¨£¬ÎÒÃÇÕâÀïʵÏÖµÄÊÇTCP£¬Òò´ËÑ¡ÓÃSOCK_STREAM£¬Èç¹ûʵÏÖUDP¿ÉÑ¡SOCK_DGRAM
//protocol:ЭÒéÀàÐÍ£¬Ò»°ãʹÓÃĬÈÏ£¬ÉèÖÃΪ0

¸Ãº¯ÊýÓÃÓÚ´ò¿ªÒ»¸öÍøÂçͨѶ½Ó¿Ú£¬³ö´íÔò·µ»Ø-1£¬³É¹¦·µ»ØÒ»¸ösocket(ÎļþÃèÊö·û)£¬Ó¦Óýø³Ì¾Í¿ÉÒÔÏñ¶ÁдÎļþÒ»Ñùµ÷ÓÃread/writeÔÚÍøÂçÉÏÊÕ·¢Êý¾Ý¡£

2¡¢°ó¶¨

int bind(int sockfd,const struct sockaddr*addr,socklen_t addrlen);
//sockfd£º·þÎñÆ÷´ò¿ªµÄsock
//ºóÁ½¸ö²ÎÊý¿ÉÒԲο¼µÚËIJ¿·ÖµÄ½éÉÜ

·þÎñÆ÷Ëù¼àÌýµÄÍøÂçµØÖ·ºÍ¶Ë¿ÚºÅÒ»°ãÊǹ̶¨²»±äµÄ£¬¿Í»§¶Ë³ÌÐòµÃÖª·þÎñÆ÷³ÌÐòµÄµØÖ·ºÍ¶Ë¿ÚºÅºó¾Í¿ÉÒÔÏò·þÎñÆ÷·¢ÆðÁ¬½Ó£¬Òò´Ë·þÎñÆ÷ÐèÒªµ÷ÓÃbindÀ´°ó¶¨Ò»¸ö¹Ì¶¨µÄÍøÂçµØÖ·ºÍ¶Ë¿ÚºÅ¡£bind³É¹¦·µ»Ø0£¬³ö´í·µ»Ø-1¡£

bind()µÄ×÷Ó㺽«²ÎÊýsockfdºÍaddr°ó¶¨ÔÚÒ»Æð£¬ÊÇsockfdÕâ¸öÓÃÓÚÍøÂçͨѶµÄÎļþÃèÊö·û¼àÌýaddrËùÃèÊöµÄµØÖ·ºÍ¶Ë¿ÚºÅ¡£

3¡¢¼àÌý

int listen(int sockfd,int backlog);
//sockfdµÄº¬ÒåÓëbindÖеÄÏàͬ¡£
//backlog²ÎÊý½âÊÍΪÄÚºËΪ´ÎÌ×½Ó¿ÚÅŶӵÄ×î´óÊýÁ¿£¬Õâ¸ö´óСһ°ãΪ5~10£¬²»ÒËÌ«´ó£¨ÊÇΪÁË·ÀÖ¹SYN¹¥»÷£©

¸Ãº¯Êý½ö±»·þÎñÆ÷¶ËʹÓã¬listen()ÉùÃ÷sockfd´¦ÓÚ¼àÌý״̬£¬²¢ÇÒ×î¶àÔÊÐíÓÐbacklog¸ö¿Í»§¶Ë´¦ÓÚÁ¬½ÓµÈ´ý״̬£¬Èç¹ûÊÕµ½¸ü¶àµÄÁ¬½ÓÇëÇó¾ÍºöÂÔ¡£listen()³É¹¦·µ»Ø0£¬Ê§°Ü·µ»Ø-1¡£

4¡¢½ÓÊÕÁ¬½Ó

int accept(int sockfd,struct sockaddr* addr,socklen_t* addrlen);
//addrlenÊÇÒ»¸ö´«Èë´«³öÐͲÎÊý£¬´«ÈëµÄÊǵ÷ÓÃÕߵĻº³åÇøcliaddrµÄ³¤¶È£¬ÒÔ±ÜÃ⻺³åÇøÒç³öÎÊÌ⣻´«³öµÄÊǿͻ§¶ËµØÖ·½á¹¹ÌåµÄʵ¼Ê³¤¶È£¨ÓпÉÄÜûÓÐÕ¼Âúµ÷ÓÃÕßÌṩµÄ»º³åÇø£©¡£Èç¹û¸øcliaddr²ÎÊý´«NULL£¬±íʾ²»¹ØÐĿͻ§¶ËµÄµØÖ·¡£

µäÐ͵ķþÎñÆ÷³ÌÐòÊÇ¿ÉÒÔͬʱ·þÎñ¶à¸ö¿Í»§¶ËµÄ£¬µ±Óпͻ§¶Ë·¢ÆðÁ¬½Óʱ£¬·þÎñÆ÷¾Íµ÷ÓÃaccept()·µ»Ø²¢½ÓÊÕÕâ¸öÁ¬½Ó£¬Èç¹ûÓдóÁ¿¿Í»§¶Ë·¢ÆðÇëÇ󣬷þÎñÆ÷À´²»¼°´¦Àí£¬»¹Ã»ÓÐacceptµÄ¿Í»§¶Ë¾Í´¦ÓÚÁ¬½ÓµÈ´ý״̬¡£

Èý´ÎÎÕÊÖÍê³Éºó£¬·þÎñÆ÷µ÷ÓÃaccept()½ÓÊÕÁ¬½Ó£¬Èç¹û·þÎñÆ÷µ÷ÓÃaccept()ʱ»¹Ã»Óпͻ§¶ËµÄÁ¬½ÓÇëÇ󣬾Í×èÈûµÈ´ýÖ±µ½Óпͻ§¶ËÁ¬½ÓÉÏÀ´¡£

5¡¢ÇëÇóÁ¬½Ó

int connect(int sockfd,const struct sockaddr* addr,socklen_t addrlen);

Õâ¸öº¯ÊýÖ»ÐèÒªÓпͻ§¶Ë³ÌÐòÀ´µ÷Ó㬵÷Óøú¯Êýºó±íÃ÷Á¬½Ó·þÎñÆ÷£¬ÕâÀïµÄ²ÎÊý¶¼ÊǶԷ½µÄµØÖ·¡£connect()³É¹¦·µ»Ø0£¬³ö´í·µ»Ø-1¡£

Á˽âÕâЩº¯Êýºó£¬ÎÒÃÇÀ´ÞÛÒ»ÞÛ¿Í»§¶Ë³ÌÐòºÍ·þÎñÆ÷³ÌÐò½¨Á¢Á¬½ÓµÄ¹ý³Ì£º

·þÎñÆ÷£ºÊ×Ïȵ÷ÓÃsocket()´´½¨Ò»¸öÌ×½Ó×ÖÓÃÀ´Í¨Ñ¶£¬Æä´Îµ÷ÓÃbind()½øÐаó¶¨Õâ¸öÎļþÃèÊö·û£¬²¢µ÷ÓÃlisten()ÓÃÀ´¼àÌý¶Ë¿ÚÊÇ·ñÓпͻ§¶ËÇëÇóÀ´£¬Èç¹ûÓУ¬¾Íµ÷ÓÃaccept()½øÐÐÁ¬½Ó£¬·ñÔò¾Í¼ÌÐø×èÈûʽµÈ´ýÖ±µ½Óпͻ§¶ËÁ¬½ÓÉÏÀ´¡£Á¬½Ó½¨Á¢ºó¾Í¿ÉÒÔ½øÐÐͨÐÅÁË¡£

¿Í»§¶Ë£ºµ÷ÓÃsocket()·ÖÅäÒ»¸öÓÃÀ´Í¨Ñ¶µÄ¶Ë¿Ú£¬½Óמ͵÷ÓÃconnect()·¢³öSYNÇëÇó²¢´¦ÓÚ×èÈûµÈ´ý·þÎñÆ÷Ó¦´ð״̬£¬·þÎñÆ÷Ó¦´ðÒ»¸öSYN-ACK·Ö¶Î£¬¿Í»§¶ËÊÕµ½ºó´Óconnect()·µ»Ø£¬Í¬Ê±Ó¦´ðÒ»¸öACK·Ö¶Î£¬·þÎñÆ÷ÊÕµ½ºó´Óaccept()·µ»Ø£¬Á¬½Ó½¨Á¢³É¹¦¡£¿Í»§¶ËÒ»°ã²»µ÷ÓÃbind()À´°ó¶¨Ò»¸ö¶Ë¿ÚºÅ£¬²¢²»ÊDz»ÔÊÐíbind()£¬·þÎñÆ÷Ò²²»ÊDZØÐëÒªbind()¡£

˼¿¼Ì⣺Ϊʲô²»½¨Òé¿Í»§¶Ë½øÐÐbind()£¿

´ð£ºµ±¿Í»§¶ËûÓÐ×Ô¼º½øÐÐbindʱ£¬ÏµÍ³Ëæ»ú·ÖÅ䏸¿Í»§¶ËÒ»¸ö¶Ë¿ÚºÅ£¬²¢ÇÒÔÚ·ÖÅäµÄʱºò£¬²Ù×÷ϵͳ»á×öµ½²»ÓëÏÖÓеĶ˿ںŷ¢Éú³åÍ»¡£µ«Èç¹û×Ô¼º½øÐÐbind£¬¿Í»§¶Ë³ÌÐò¾ÍºÜÈÝÒ׳öÏÖÎÊÌ⣬¼ÙÉèÔÚÒ»¸öPC»úÉÏ¿ªÆô¶à¸ö¿Í»§¶Ë½ø³Ì£¬Èç¹ûÊÇÓû§×Ô¼º°ó¶¨Á˶˿ںţ¬±ØÈ»»áÔì³É¶Ë¿Ú³åÍ»£¬Ó°ÏìͨÐÅ¡£

½øÐÐÒ»·¬ÀíÂÛ֪ʶºóÎÒÃǾͿÉÒÔд´úÂëÁË£º

¡°server.c¡±

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int startup(int _port,const char* _ip)
{
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0)
{
perror("socket");
exit(1);
}
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons( _port);
local.sin_addr.s_addr = inet_addr(_ip);
socklen_t len = sizeof(local);
if(bind(sock,(struct sockaddr*)&local , len) < 0)
{
perror("bind");
exit(2);
}
if(listen(sock, 5) < 0) //ÔÊÐíÁ¬½ÓµÄ×î´óÊýÁ¿Îª5
{
perror("listen");
exit(3);
}
return sock;
}
int main(int argc,const char* argv[])
{
if(argc != 3)
{
printf("Usage:%s [loacl_ip] [loacl_port]\n",argv[0]);
return 1;
}
int listen_sock = startup(atoi(argv[2]),argv[1]);//³õʼ»¯
//ÓÃÀ´½ÓÊÕ¿Í»§¶ËµÄsocketµØÖ·½á¹¹Ìå
struct sockaddr_in remote;
socklen_t len = sizeof(struct sockaddr_in);
while(1)
{
int sock = accept(listen_sock, (struct sockaddr*)&remote, &len);
if(sock < 0)
{
perror("accept");
continue;
}
printf("get a client, ip:%s, port:%d\n",inet_ntoa(remote.sin_addr),
ntohs(remote.sin_port));
char buf[1024];
while(1)
{
ssize_t _s = read(sock, buf, sizeof(buf)-1);
if(_s > 0)
{
buf[_s] = 0;
printf("client:%s",buf);
}
else
{
printf("client is quit!\n");
break;
}
}
}
return 0;
}

¡±client.c¡°

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main(int argc,const char* argv[])
{
if(argc != 3)
{
printf("Usage:%s [ip] [port]\n",argv[0]);
return 0;
}
//´´½¨Ò»¸öÓÃÀ´Í¨Ñ¶µÄsocket
int sock = socket(AF_INET,SOCK_STREAM, 0);
if(sock < 0)
{
perror("socket");
return 1;
}
//ÐèÒªconnectµÄÊǶԶ˵ĵØÖ·£¬Òò´ËÕâÀﶨÒå·þÎñÆ÷¶ËµÄµØÖ·½á¹¹Ìå
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
socklen_t len = sizeof(struct sockaddr_in);
if(connect(sock, (struct sockaddr*)&server, len) < 0 )
{
perror("connect");
return 2;
}
//Á¬½Ó³É¹¦½øÐÐÊÕÊý¾Ý
char buf[1024];
while(1)
{
printf("send###");
fflush(stdout);
ssize_t _s = read(0, buf, sizeof(buf)-1);
buf[_s] = 0;
write(sock, buf, _s);
}
close(sock);
return 0;
}

µ«ÊÇÕâÑùʵÏÖÖ»ÄܽøÐе¥½ø³ÌͨÐÅ£¬Ò²¾ÍÊÇ˵ÿ´ÎÖ»ÄÜʹһ¸ö¿Í»§¶ËÁ¬½ÓÉϽøÐÐÊý¾ÝͨѶ£¬ÕâÏÔÈ»²»·ûºÏ·þÎñÆ÷µÄ»ù±¾ÒªÇó¡£ÎÒÃÇ¿ÉÒÔÏë°ì·¨Ð޸ķþÎñÆ÷¶ËµÄ´úÂ룬ÿ´Îaccept³É¹¦Ö®ºó¾Í´´½¨Ò»¸ö×Ó½ø³Ì£¬ÈÃ×Ó½ø³ÌÈ¥´¦Àí¶ÁдÊý¾Ý£¬¸¸½ø³Ì¼ÌÐø¼àÌý²¢accept¡£

¾ßÌå´úÂ룺https://github.com/lybb/Linux/tree/master/TCP_pro

Ð޸ĵĴúÂëÔÚ·þÎñÆ÷³ÌÐòµÄsocket()ºÍbind()Ö®¼ä¼ÓÈëÁËÈçϵĴúÂ룺

int opt=1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&opt,
sizeof(opt));
//ÉèÖÃsockfdµÄÑ¡ÏîΪSO_REUSEADDRΪ1£¬±íʾÔÊÐí´´½¨
¶Ë¿ÚºÅÏàͬµ«IP²»Í¬µÄ¶à¸ö
//socketÃèÊö·û

µ«ÊÇÈç¹ûÊÇÓô´½¨×Ó½ø³ÌµÄ·½·¨±È½ÏÀË·Ñ×ÊÔ´£¬ÎÒÃÇ¿ÉÒÔÐÞ¸ÄΪ´´½¨Ï̵߳ķ½·¨

ËÄ¡¢sockaddrÊý¾Ý½á¹¹

IPv4 ºÍ IPv6 µÄµØÖ·¸ñʽ¶¨ÒåÔÚ¡°netinet/in.h¡±ÖУ¬IPv4ÓÃsockaddr_in½á¹¹Ìå±íʾ£¬°üÀ¨16λ¶Ë¿ÚºÅºÍ32λIPµØÖ·£»IPv6ÓÃsockaddr_in6½á¹¹Ìå±íʾ£¬°üÀ¨16λ¶Ë¿ÚºÅ¡¢128λIPµØÖ·ºÍһЩ¿ØÖÆ×ֶΡ£

UNIX Domain SocketµÄµØÖ·¸ñʽ¶¨ÒåÔÚsys/un.hÖУ¬ÓÃsockaddr_un½á¹¹Ìå±íʾ¡£¸÷ÖÖsocketµØÖ·½á¹¹ÌåµÄ¿ªÍ·¶¼ÊÇÏàͬµÄ£¬Ç°16λ±í?ʾÕû¸ö½á¹¹ÌåµÄ³¤¶È(²¢²»ÊÇËùÓÐUNIXµÄʵÏÖ¶¼Ó㤶È×ֶΣ¬ÈçLinux¾ÍûÓÐ)£¬ºó16λ±íʾµØÖ·ÀàÐÍ¡£IPv4¡¢IPv6ºÍUNIX Domain SocketµÄµØ Ö·ÀàÐÍ·Ö±ð¶¨ÒåΪ³£ÊýAF_INET¡¢AF_INET6¡¢AF_UNIX¡£ÕâÑù£¬Ö»ÒªÈ¡µÃijÖÖsockaddr½á¹¹ÌåµÄÊ×µØÖ·£¬²»ÐèÒªÖªµÀ¾ßÌåÊÇÄÄÖÖÀàÐ͵Äsockaddr½á¹¹Ì壬¾Í¿ÉÒÔ¸ù¾ÝµØÖ·ÀàÐÍ×Ö¶ÎÈ·¶¨½á¹¹ÌåÖеÄÄÚÈÝ¡£Òò´Ësocket API¿ÉÒÔ½ÓÊܸ÷ÖÖÀàÐ͵Äsockaddr½á¹¹ÌåÖ¸Õë×ö²ÎÊý£¬Àý Èçbind¡¢accept¡¢connectµÈº¯Êý£¬ÕâЩº¯ÊýµÄ²ÎÊýÓ¦¸ÃÉè¼Æ³Évoid ÀàÐÍÒÔ±ã½ÓÊܸ÷ÖÖÀàÐ͵ÄÖ¸Õ룬µ«ÊÇsock APIµÄʵÏÖÔçÓÚANSI C±ê×¼»¯£¬ÄÇʱ»¹Ã»ÓÐvoid ÀàÐÍ,Òò´ËÕâдº¯ÊýµÄ²ÎÊý¶¼ÓÃstruct sockaddr*ÀàÐͱíʾ£¬ÔÚ´«²Î֮ǰÐèÒªÇ¿ÖÆÀàÐÍת»»£¨ÔÚbindº¯ÊýÖоÍÓÐÓõ½£©¡£

sockaddr_inÖеijÉÔ±struct in_addr sin_addr±íʾ32λµÄIPµØÖ·¡£µ«ÊÇÎÒÃÇͨ³£Óõã·ÖÊ®½øÖƵÄ×Ö·û´®±íʾIPµØÖ·£¬ÒÔϺ¯Êý¿ÉÒÔÔÚ×Ö·û´®±íʾºÍin_addr±íʾ֮¼äת»»¡£

×Ö·û´®×ªin_addrµÄº¯Êý:

   
2214 ´Îä¯ÀÀ       31
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????