ÍøÂç±à³Ì£¬Ò»¶¨Àë²»¿ªÌ×½Ó¿Ú£»ÄÇʲôÊÇÌ×½Ó¿ÚÄØ£¿ÔÚLinuxÏ£¬ËùÓеÄI/O²Ù×÷¶¼ÊÇͨ¹ý¶ÁдÎļþÃèÊö·û¶ø²úÉúµÄ£¬ÎļþÃèÊö·ûÊÇÒ»¸öºÍ´ò¿ªµÄÎļþÏà¹ØÁªµÄÕûÊý£¬Õâ¸öÎļþ²¢²»Ö»°üÀ¨ÕæÕý´æ´¢ÔÚ´ÅÅÌÉϵÄÎļþ£¬»¹°üÀ¨Ò»¸öÍøÂçÁ¬½Ó¡¢Ò»¸öÃüÃû¹ÜµÀ¡¢Ò»¸öÖն˵ȣ¬¶øÌ×½Ó¿Ú¾ÍÊÇϵͳ½ø³ÌºÍÎļþÃèÊö·ûͨÐŵÄÒ»ÖÖ·½·¨¡£Ä¿Ç°×î³£ÓõÄÌ×½Ó¿ÚÊÇ×Ö£º×Ö½ÚÁ÷Ì×½Ó¿Ú(»ùÓÚTCP)ºÍÊý¾Ý±¨Ì×½Ó¿Ú(»ùÓÚUDP)£¬µ±È»»¹ÓÐÔʼÌ×½Ó¿Ú(ÔʼÌ×½Ó¿ÚÌṩTCPÌ×½Ó¿ÚºÍUDPÌ×½Ó¿ÚËù²»ÌṩµÄ¹¦ÄÜ£¬Èç¹¹Ôì×Ô¼ºµÄTCP»òUDP·Ö×é)µÈ£¬ÎÒÃÇÕâÀïÖ÷Òª½éÉÜ×Ö½ÚÁ÷Ì×½Ó¿ÚºÍÊý¾Ý±¨Ì×½Ó¿Ú¡£
ҪѧϰÍøÂç±à³Ì£¬Ò»¶¨Àë²»¿ªÍøÂç¿âµÄº¯Êý£¬ÔÚLinuxϵͳÏ£¬¿ÉÒÔÓÃ"man º¯ÊýÃû"À´µÃµ½Õâ¸öº¯ÊýµÄ°ïÖú£¬²»¹ýΪÁËÕÕ¹ËEÎIJ»´óºÃµÄÅóÓÑ£¬ÏÂÃæ¾Í½«³£ÓõÄÍøÂ纯ÊýºÍÓ÷¨ÁгöÀ´¹©´ó¼Ò²Î¿¼£º
£±¡¢socketº¯Êý£ºÎªÁËÖ´ÐÐÍøÂçÊäÈëÊä³ö£¬Ò»¸ö½ø³Ì±ØÐë×öµÄµÚÒ»¼þʾÍÊǵ÷ÓÃsocketº¯Êý»ñµÃÒ»¸öÎļþÃèÊö·û¡£
-------------------------------------------------------------------------------------
#include ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡
int socket(int family,int type,int protocol); ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡·µ»Ø£º·Ç¸ºÃèÊö×Ö£££³É¹¦¡¡¡¡¡¡-1£££Ê§°Ü
-------------------------------------------------------------------------------------
µÚÒ»¸ö²ÎÊýÖ¸Ã÷ÁËÐÒé´Ø£¬Ä¿Ç°Ö§³Ö5ÖÖÐÒé´Ø£¬×î³£ÓõÄÓÐAF_INET(IPv4ÐÒé)ºÍAF_INET6(IPv6ÐÒé)£»µÚ¶þ¸ö²ÎÊýÖ¸Ã÷Ì×½Ó¿ÚÀàÐÍ£¬ÓÐÈýÖÖÀàÐÍ¿ÉÑ¡£ºSOCK_STREAM(×Ö½ÚÁ÷Ì×½Ó¿Ú)¡¢SOCK_DGRAM(Êý¾Ý±¨Ì×½Ó¿Ú)ºÍSOCK_RAW(ÔʼÌ×½Ó¿Ú)£»Èç¹ûÌ×½Ó¿ÚÀàÐͲ»ÊÇÔʼÌ×½Ó¿Ú£¬ÄÇôµÚÈý¸ö²ÎÊý¾ÍΪ0¡£
£²¡¢connectº¯Êý£ºµ±ÓÃsocket½¨Á¢ÁËÌ׽ӿں󣬿ÉÒÔµ÷ÓÃconnectΪÕâ¸öÌ×½Ó×ÖÖ¸Ã÷Ô¶³Ì¶ËµÄµØÖ·£»Èç¹ûÊÇ×Ö½ÚÁ÷Ì×½Ó¿Ú£¬connect¾ÍʹÓÃÈý´ÎÎÕÊÖ½¨Á¢Ò»¸öÁ¬½Ó£»Èç¹ûÊÇÊý¾Ý±¨Ì×½Ó¿Ú£¬connect½öÖ¸Ã÷Ô¶³Ì¶ËµØÖ·£¬¶ø²»ÏòËü·¢ËÍÈκÎÊý¾Ý¡£
-------------------------------------------------------------------------------------
#include ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡
int connect(int sockfd,const struct sockaddr * servaddr,socklen_t addrlen); ¡¡
¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡·µ»Ø£º0£££³É¹¦¡¡¡¡¡¡-1£££Ê§°Ü
-------------------------------------------------------------------------------------
µÚÒ»¸ö²ÎÊýÊÇsocketº¯Êý·µ»ØµÄÌ×½Ó¿ÚÃèÊö×Ö£»µÚ¶þºÍµÚÈý¸ö²ÎÊý·Ö±ðÊÇÒ»¸öÖ¸ÏòÌ×½Ó¿ÚµØÖ·½á¹¹µÄÖ¸ÕëºÍ¸Ã½á¹¹µÄ´óС¡£
ÕâЩµØÖ·½á¹¹µÄÃû×Ö¾ùÒÑ¡°sockaddr_¡±¿ªÍ·£¬²¢ÒÔ¶ÔӦÿ¸öÐÒé×åµÄΨһºó׺½áÊø¡£ÒÔIPv4Ì×½Ó¿ÚµØÖ·½á¹¹ÎªÀý£¬ËüÒÔ¡°sockaddr_in¡±ÃüÃû£¬¶¨ÒåÔÚÍ·Îļþ£»ÒÔÏÂÊǽṹÌåµÄÄÚÈÝ£º
-------------------------------------------------------------------------------------
struct in_addr {
in_addr_t s_addr;¡¡ ¡¡ ¡¡ /* IPv4µØÖ· */
};¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡ ¡¡¡¡¡¡ ¡¡
struct sockaddr_in {
uint8_t sin_len; /* ÎÞ·ûºÅµÄ8λÕûÊý */
sa_family_t sin_family; /* Ì×½Ó¿ÚµØÖ·½á¹¹µÄµØÖ·´Ø£¬ÕâÀïΪAF_INET */
in_port_t sin_port; /* TCP»òUDP¶Ë¿Ú */
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡
struct in_addr sin_addr;
char sin_zero[8];
};¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡
-------------------------------------------------------------------------------------
£³¡¢bindº¯Êý£ºÎªÌ×½Ó¿Ú·ÖÅäÒ»¸ö±¾µØIPºÍÐÒé¶Ë¿Ú£¬¶ÔÓÚÍø¼ÊÐÒ飬ÐÒéµØÖ·ÊÇ32λIPv4µØÖ·»ò128λIPv6µØÖ·Óë16λµÄTCP»òUDP¶Ë¿ÚºÅµÄ×éºÏ£»ÈçÖ¸¶¨¶Ë¿ÚΪ0£¬µ÷ÓÃbindʱÄں˽«Ñ¡ÔñÒ»¸öÁÙʱ¶Ë¿Ú£¬Èç¹ûÖ¸¶¨Ò»¸öͨÅäIPµØÖ·£¬ÔòÒªµÈµ½½¨Á¢Á¬½ÓºóÄں˲ÅÑ¡ÔñÒ»¸ö±¾µØIPµØÖ·¡£
-------------------------------------------------------------------------------------
#include ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
int bind(int sockfd,const struct sockaddr * myaddr,socklen_t addrlen);
·µ»Ø£º0£££³É¹¦¡¡¡¡¡¡-1£££Ê§°Ü¡¡
-------------------------------------------------------------------------------------
µÚÒ»¸ö²ÎÊýÊÇsocketº¯Êý·µ»ØµÄÌ×½Ó¿ÚÃèÊö×Ö£»µÚ¶þºÍµÚµÚÈý¸ö²ÎÊý·Ö±ðÊÇÒ»¸öÖ¸ÏòÌض¨ÓÚÐÒéµÄµØÖ·½á¹¹µÄÖ¸ÕëºÍ¸ÃµØÖ·½á¹¹µÄ³¤¶È¡£
£´¡¢listenº¯Êý£ºlistenº¯Êý½ö±»TCP·þÎñÆ÷µ÷Óã¬ËüµÄ×÷ÓÃÊǽ«ÓÃsock´´½¨µÄÖ÷¶¯Ì×½Ó¿Úת»»³É±»¶¯Ì×½Ó¿Ú£¬²¢µÈ´ýÀ´×Ô¿Í»§¶ËµÄÁ¬½ÓÇëÇó¡£
-------------------------------------------------------------------------------------
#include ¡¡¡¡¡¡¡¡¡¡¡¡
int listen(int sockfd,int backlog); ¡¡¡¡
·µ»Ø£º0£££³É¹¦¡¡¡¡¡¡-1£££Ê§°Ü
-------------------------------------------------------------------------------------
¡¡¡¡µÚÒ»¸ö²ÎÊýÊÇsocketº¯Êý·µ»ØµÄÌ×½Ó¿ÚÃèÊö×Ö£»µÚ¶þ¸ö²ÎÊý¹æ¶¨ÁËÄÚºËΪ´ËÌ×½Ó¿ÚÅŶӵÄ×î´óÁ¬½Ó¸öÊý¡£ÓÉÓÚlistenº¯ÊýµÚ¶þ¸ö²ÎÊýµÄÔÒò£¬ÄÚºËҪά»¤Á½¸ö¶ÓÁУºÒÔÍê³ÉÁ¬½Ó¶ÓÁкÍδÍê³ÉÁ¬½Ó¶ÓÁС£Î´Íê³É¶ÓÁÐÖдæ·ÅµÄÊÇTCPÁ¬½ÓµÄÈý·ÎÕÊÖΪÍê³ÉµÄÁ¬½Ó£¬acceptº¯ÊýÊÇ´ÓÒÔÁ¬½Ó¶ÓÁÐÖÐÈ¡Á¬½Ó·µ»Ø¸ø½ø³Ì£»µ±ÒÔÁ¬½Ó¶ÓÁÐΪ¿Õʱ£¬½ø³Ì½«½øÈë˯Ãß״̬¡£
£µ¡¢acceptº¯Êý£ºacceptº¯ÊýÓÉTCP·þÎñÆ÷µ÷Ó㬴ÓÒÑÍê³ÉÁ¬½Ó¶ÓÁÐÍ··µ»ØÒ»¸öÒÑÍê³ÉÁ¬½Ó£¬Èç¹ûÍê³ÉÁ¬½Ó¶ÓÁÐΪ¿Õ£¬Ôò½ø³Ì½øÈë˯Ãß״̬¡£
-------------------------------------------------------------------------------------
#include ¡¡¡¡ ¡¡ ¡¡ ¡¡
int accept(int sockfd,struct sockaddr * cliaddr,socklen_t * addrlen);¡¡¡¡¡¡¡¡ ¡¡
¡¡¡¡ ·µ»Ø£º·Ç¸ºÃèÊö×Ö£££³É¹¦¡¡¡¡¡¡-1£££Ê§°Ü
-------------------------------------------------------------------------------------
µÚÒ»¸ö²ÎÊýÊÇsocketº¯Êý·µ»ØµÄÌ×½Ó¿ÚÃèÊö×Ö£»µÚ¶þ¸öºÍµÚÈý¸ö²ÎÊý·Ö±ðÊÇÒ»¸öÖ¸ÏòÁ¬½Ó·½µÄÌ×½Ó¿ÚµØÖ·½á¹¹ºÍ¸ÃµØÖ·½á¹¹µÄ³¤¶È£»¸Ãº¯Êý·µ»ØµÄÊÇÒ»¸öȫеÄÌ×½Ó¿ÚÃèÊö×Ö£»Èç¹û¶Ô¿Í»§¶ÎµÄÐÅÏ¢²»¸ÐÐËȤ£¬¿ÉÒÔ½«µÚ¶þºÍµÚÈý¸ö²ÎÊýÖÃΪ¿Õ¡£
£¶¡¢inet_ptonº¯Êý£º½«µã·ÖÊ®½øÖÆ´®×ª»»³ÉÍøÂç×Ö½ÚÐò¶þ½øÖÆÖµ£¬´Ëº¯Êý¶ÔIPv4µØÖ·ºÍIPv6µØÖ·¶¼ÄÜ´¦Àí¡£
-------------------------------------------------------------------------------------
¡¡#include ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
int inet_pton(int family,const char * strptr,void * addrptr);¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡
·µ»Ø£º1£££³É¹¦¡¡¡¡¡¡0£££ÊäÈë²»ÊÇÓÐЧµÄ±í´ï¸ñʽ¡¡¡¡¡¡-1£££Ê§°Ü
-------------------------------------------------------------------------------------
µÚÒ»¸ö²ÎÊý¿ÉÒÔÊÇAF_INET»òAF_INET6£ºµÚ¶þ¸ö²ÎÊýÊÇÒ»¸öÖ¸Ïòµã·ÖÊ®½øÖÆ´®µÄÖ¸Õ룺µÚÈý¸ö²ÎÊýÊÇÒ»¸öÖ¸Ïòת»»ºóµÄÍøÂç×Ö½ÚÐòµÄ¶þ½øÖÆÖµµÄÖ¸Õë¡£
£·¡¢inet_ntopº¯Êý£ººÍinet_ptonº¯ÊýÕýºÃÏà·´£¬inet_ntopº¯ÊýÊǽ«ÍøÂç×Ö½ÚÐò¶þ½øÖÆֵת»»³Éµã·ÖÊ®½øÖÆ´®¡£
-------------------------------------------------------------------------------------
#include ¡¡
const char * inet_ntop(int family,const void * addrptr,char * strptr,size_t len); ¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ·µ»Ø£ºÖ¸Ïò½á¹ûµÄÖ¸Õ룣£³É¹¦¡¡¡¡¡¡NULL£££Ê§°Ü
-------------------------------------------------------------------------------------
µÚÒ»¸ö²ÎÊý¿ÉÒÔÊÇAF_INET»òAF_INET6£ºµÚ¶þ¸ö²ÎÊýÊÇÒ»¸öÖ¸ÏòÍøÂç×Ö½ÚÐòµÄ¶þ½øÖÆÖµµÄÖ¸Õ룻µÚÈý¸ö²ÎÊýÊÇÒ»¸öÖ¸Ïòת»»ºóµÄµã·ÖÊ®½øÖÆ´®µÄÖ¸Õ룻µÚËĸö²ÎÊýÊÇÄ¿±êµÄ´óС£¬ÒÔÃ⺯ÊýÒç³öÆäµ÷ÓÃÕߵĻº³åÇø¡£
£¸¡¢fockº¯Êý£ºÔÚÍøÂç·þÎñÆ÷ÖУ¬Ò»¸ö·þÎñ¶Ë¿Ú¿ÉÒÔÔÊÐíÒ»¶¨ÊýÁ¿µÄ¿Í»§¶ËͬʱÁ¬½Ó£¬Õâʱµ¥½ø³ÌÊDz»¿ÉÄÜʵÏֵģ¬¶øfock¾Í·ÖÅäÒ»¸ö×Ó½ø³ÌºÍ¿Í»§¶Ë»á»°£¬µ±È»£¬ÕâÖ»ÊÇfockµÄÒ»¸öµäÐÍÓ¦Óá£
-------------------------------------------------------------------------------------
#include ¡¡
pid_t fock(void);¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡ ¡¡ ·µ»Ø£ºÔÚ×Ó½ø³ÌÖÐΪ0£¬ÔÚ¸¸½ø³ÌÖÐΪ×Ó½ø³ÌID¡¡¡¡¡¡-1£££Ê§°Ü
-------------------------------------------------------------------------------------
fockº¯Êýµ÷Óú󷵻ØÁ½´Î£¬¸¸½ø³Ì·µ»Ø×Ó½ø³ÌID£¬×Ó½ø³Ì·µ»Ø0¡£
ÓÐÁËÉÏÃæµÄ»ù´¡ÖªÊ¶£¬ÎÒÃǾͿÉÒÔ½øÒ»²½Á˽âTCPÌ×½Ó¿ÚºÍUDPÌ×½Ó¿Ú
£±¡¢TCPÌ×½Ó¿Ú
¡¡¡¡TCPÌ×½Ó¿ÚʹÓÃTCP½¨Á¢Á¬½Ó£¬½¨Á¢Ò»¸öTCPÁ¬½ÓÐèÒªÈý´ÎÎÕÊÖ£¬»ù±¾¹ý³ÌÊÇ·þÎñÆ÷ÏȽ¨Á¢Ò»¸öÌ×½Ó¿Ú²¢µÈ´ý¿Í»§¶ËµÄÁ¬½ÓÇëÇó£»µ±¿Í»§¶Ëµ÷ÓÃconnect½øÐÐÖ÷¶¯Á¬½ÓÇëÇóʱ£¬¿Í»§¶ËTCP·¢ËÍÒ»¸öSYN£¬¸æËß·þÎñÆ÷¿Í»§¶Ë½«ÔÚÁ¬½ÓÖз¢Ë͵ÄÊý¾ÝµÄ³õʼÐòÁкţ»µ±·þÎñÆ÷ÊÕµ½Õâ¸öSYNºóÒ²¸ø¿Í»§¶Ë·¢Ò»¸öSYN£¬ÀïÃæ°üº¬ÁË·þÎñÆ÷½«ÔÚͬһÁ¬½ÓÖз¢Ë͵ÄÊý¾ÝµÄ³õʼÐòÁкţ»×îºó¿Í»§ÔÚÈ·ÈÏ·þÎñÆ÷·¢µÄSYN¡£µ½´ËΪֹ£¬Ò»¸öTCPÁ¬½Ó±»½¨Á¢¡£
¡¡¡¡ÏÂÃæ¾ÍÓÃÒ»¸öÀý×ÓÀ´ËµÃ÷·þÎñÆ÷ºÍ¿Í»§ÊÇÔõôÁ¬½ÓµÄ
-------------------------------------------------------------------------------------
/* client.c */
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡int main(int argc,char *argv[]) {
¡¡¡¡¡¡¡¡ int sockfd,numbytes;
¡¡¡¡¡¡¡¡ char buf[100];
¡¡¡¡¡¡¡¡ struct hostent *he;
¡¡¡¡¡¡¡¡ struct sockaddr_in their_addr;
¡¡¡¡¡¡¡¡ int i = 0;
¡¡¡¡¡¡¡¡¡¡//½«»ù±¾Ãû×ֺ͵Øַת»»
¡¡¡¡¡¡¡¡ he = gethostbyname(argv[1]);
¡¡¡¡¡¡¡¡¡¡//½¨Á¢Ò»¸öTCPÌ×½Ó¿Ú
¡¡¡¡¡¡¡¡ if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) {
¡¡¡¡¡¡¡¡ perror("socket");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡ ¡¡}
//³õʼ»¯½á¹¹Ì壬Á¬½Óµ½·þÎñÆ÷µÄ2323¶Ë¿Ú
¡¡¡¡¡¡¡¡ their_addr.sin_family = AF_INET;
¡¡¡¡¡¡¡¡ their_addr.sin_port = htons(2323);
¡¡¡¡¡¡¡¡ their_addr.sin_addr = *((struct in_addr *)he->h_addr);
¡¡¡¡¡¡¡¡ bzero(&(their_addr.sin_zero),8);
¡¡¡¡¡¡¡¡¡¡//ºÍ·þÎñÆ÷½¨Á¢Á¬½Ó
¡¡¡¡¡¡¡¡ if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1) {
¡¡¡¡¡¡¡¡ perror("connect");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡ ¡¡¡¡}
//Ïò·þÎñÆ÷·¢ËÍ×Ö·û´®"hello!"
¡¡¡¡¡¡¡¡ if(send(sockfd,"hello!",6,0)==-1) {
¡¡¡¡¡¡ ¡¡perror("send");
¡¡¡¡¡¡¡¡¡¡¡¡exit(1);
¡¡¡¡¡¡¡¡ }
//½ÓÊÜ´Ó·þÎñÆ÷·µ»ØµÄÐÅÏ¢
¡¡¡¡¡¡¡¡ if((numbytes = recv(sockfd,buf,100,0))==-1) {
¡¡ ¡¡¡¡¡¡perror("recv");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡ buf[numbytes] = \;
¡¡¡¡¡¡¡¡ printf("result:%s",buf);
¡¡¡¡¡¡¡¡ close(sockfd);
¡¡¡¡¡¡ return 0;
¡¡ ¡¡¡¡}
-------------------------------------------------------------------------------------
/* server.c */
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡#include
¡¡¡¡¡¡¡¡main() {
¡¡¡¡¡¡¡¡ int sockfd,new_fd;
¡¡¡¡¡¡¡¡ struct sockaddr_in my_addr;
¡¡¡¡¡¡¡¡ struct sockaddr_in their_addr;
¡¡¡¡¡¡¡¡ int sin_size;
¡¡¡¡¡¡¡¡¡¡//½¨Á¢TCPÌ×½Ó¿Ú
¡¡¡¡¡¡¡¡ if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) {
¡¡¡¡¡¡¡¡ perror("socket");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡¡¡//³õʼ»¯½á¹¹Ì壬²¢°ó¶¨2323¶Ë¿Ú
¡¡¡¡¡¡¡¡ my_addr.sin_family = AF_INET;
¡¡¡¡¡¡¡¡ my_addr.sin_port = htons(2323);
¡¡¡¡¡¡¡¡ my_addr.sin_addr.s_addr = INADDR_ANY;
¡¡¡¡¡¡¡¡ bzero(&(my_addr.sin_zero),8);
//°ó¶¨Ì×½Ó¿Ú
¡¡¡¡¡¡¡¡ if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) {
¡¡¡¡¡¡¡¡ perror("bind");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡¡¡//´´½¨¼àÌýÌ×½Ó¿Ú
¡¡¡¡¡¡¡¡ if(listen(sockfd,10)==-1) {
¡¡¡¡¡¡¡¡ perror("listen");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡¡¡ }
//µÈ´ýÁ¬½Ó
¡¡¡¡¡¡¡¡ while(1) {
¡¡¡¡¡¡¡¡ sin_size = sizeof(struct sockaddr_in);
¡¡¡¡¡¡¡¡ perror("server is run");
¡¡¡¡¡¡¡¡¡¡¡¡//Èç¹û½¨Á¢Á¬½Ó£¬½«²úÉúÒ»¸öȫеÄÌ×½Ó×Ö
¡¡¡¡¡¡¡¡ if((new_fd = accept(sockfd,(struct sockaddr *)&their_addr,&sin_size))==-1) {
¡¡¡¡¡¡¡¡ perror("accept");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡¡¡¡¡//Éú³ÉÒ»¸ö×Ó½ø³ÌÀ´Íê³ÉºÍ¿Í»§¶ËµÄ»á»°£¬¸¸½ø³Ì¼ÌÐø¼àÌý
¡¡¡¡¡¡¡¡ if(!fork()) {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡//¶ÁÈ¡¿Í»§¶Ë·¢À´µÄÐÅÏ¢
¡¡¡¡¡¡¡¡ if((numbytes = recv(new_fd,buff,strlen(buff),0))==-1) {
¡¡¡¡¡¡ ¡¡ perror("recv");
¡¡¡¡¡¡¡¡ exit(1);
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡ printf("%s",buff);
¡¡¡¡¡¡¡¡¡¡¡¡¡¡//½«´Ó¿Í»§¶Ë½ÓÊÕµ½µÄÐÅÏ¢ÔÙ·¢»Ø¿Í»§¶Ë
¡¡¡¡¡¡¡¡ if(send(new_fd,buff,strlen(buff),0)==-1)
¡¡¡¡¡¡¡¡perror("send");
¡¡¡¡¡¡¡¡ close(new_fd);
¡¡¡¡¡¡¡¡ exit(0);
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡ close(new_fd);
¡¡¡¡¡¡¡¡ }
¡¡¡¡¡¡¡¡ close(sockfd);
¡¡¡¡¡¡¡¡}
-------------------------------------------------------------------------------------
ÏÖÔÚÈÃÎÒÃÇÀ´±àÒëÕâÁ½¸ö³ÌÐò£º
root@linuxaid#gcc -o server server.c
root@linuxaid#gcc -o client client.c
È»ºóÔÚһ̨¼ÆËã»úÉÏÏÈÔËÐзþÎñÆ÷³ÌÐò£¬ÔÙÔÚÁíÒ»¸öÖÕ¶ËÉÏÔËÐпͻ§¶Ë¾Í»á¿´µ½½á¹û£»Èç¹û²»ÔËÐзþÎñÆ÷³ÌÐò¶øÏÈÔËÐпͻ§³ÌÐò½«Á¢¼´Ìáʾ"Connect: Connection refused"£¬Õâ¾ÍÊÇTCPÌ׽ӿڵĺô¦£¬Èç¹ûÊÇUDPÌ×½Ó¿Ú½«»áÓÐÒ»¸öÑÓʱ²Å»áµÃµ½´íÎóÐÅÏ¢(UDPÌ×½Ó¿ÚºóÃæÓнéÉÜ)¡£
-------------------------------------------------------------------------------------
¡¡¡¡½¨Á¢Ò»¸öTCPÁ¬½ÓÐèÒªÈý´ÎÎÕÊÖ£¬¶ø¶Ï¿ªÒ»¸öTCPÔòÐèÒªËĸö·Ö½Ú¡£µ±Ä³¸öÓ¦Óýø³Ìµ÷ÓÃclose(Ö÷¶¯¶Ë)ºó(¿ÉÒÔÊÇ·þÎñÆ÷¶Ë£¬Ò²¿ÉÒÔÊÇ¿Í»§¶Ë)£¬ÕâÒ»¶ËµÄTCP·¢ËÍÒ»¸öFIN£¬±íʾÊý¾Ý·¢ËÍÍê±Ï£»ÁíÒ»¶Ë(±»¶¯¶Ë)·¢ËÍÒ»¸öÈ·ÈÏ£¬µ±±»¶¯¶Ë´ý´¦ÀíµÄÓ¦Óýø³Ì¶¼´¦ÀíÍê±Ïºó£¬·¢ËÍÒ»¸öFINµ½Ö÷¶¯¶Ë£¬²¢¹Ø±ÕÌ×½Ó¿Ú£¬Ö÷¶¯¶Ë½ÓÊÕµ½Õâ¸öFINºóÔÙ·¢ËÍÒ»¸öÈ·ÈÏ£¬µ½´ËΪֹÕâ¸öTCPÁ¬½Ó±»¶Ï¿ª¡£
£²¡¢UDPÌ×½Ó¿Ú
¡¡¡¡UDPÌ×½Ó¿ÚÊÇÎÞÁ¬½ÓµÄ¡¢²»¿É¿¿µÄÊý¾Ý±¨ÐÒ飻¼ÈÈ»Ëû²»¿É¿¿ÎªÊ²Ã´»¹ÒªÓÃÄØ£¿ÆäÒ»£ºµ±Ó¦ÓóÌÐòʹÓù㲥»ò¶à²¥ÊÇÖ»ÄÜʹÓÃUDPÐÒ飻Æä¶þ£ºÓÉÓÚËûÊÇÎÞÁ¬½ÓµÄ£¬ËùÒÔËٶȿ졣ÒòΪUDPÌ×½Ó¿ÚÊÇÎÞÁ¬½ÓµÄ£¬Èç¹ûÒ»·½µÄÊý¾Ý±¨¶ªÊ§£¬ÄÇÁíÒ»·½½«ÎÞÏ޵ȴý£¬½â¾ö°ì·¨ÊÇÉèÖÃÒ»¸ö³¬Ê±¡£
¡¡¡¡ÔÚ±àдUDPÌ×½Ó¿Ú³ÌÐòʱ£¬Óм¸µãҪעÒ⣺½¨Á¢Ì×½Ó¿Úʱsocketº¯ÊýµÄµÚ¶þ¸ö²ÎÊýÓ¦¸ÃÊÇSOCK_DGRAM£¬ËµÃ÷Êǽ¨Á¢Ò»¸öUDPÌ×½Ó¿Ú£»ÓÉÓÚUDPÊÇÎÞÁ¬½ÓµÄ£¬ËùÒÔ·þÎñÆ÷¶Ë²¢²»ÐèÒªlisten»òacceptº¯Êý£»µ±UDPÌ×½Ó¿Úµ÷ÓÃconnectº¯Êýʱ£¬ÄÚºËÖ»¼Ç¼Á¬½Ó·ÅµÄIPµØÖ·ºÍ¶Ë¿Ú£¬²¢Á¢¼´·µ»Ø¸øµ÷Óýø³Ì£¬ÕýÒòΪÕâ¸öÌØÐÔ£¬UDP·þÎñÆ÷³ÌÐòÖв¢²»Ê¹ÓÃfockº¯Êý£¬Óõ¥½ø³Ì¾ÍÄÜÍê³ÉËùÓпͻ§µÄÇëÇó¡£
geekf ÓÚ 2015-11-17 15:47:31·¢±í:
:0)1
luguanhuang ÓÚ 2011-02-23 22:47:38·¢±í:
ºÃ¶«Î÷
xuzilong100200 ÓÚ 2011-02-20 15:56:59·¢±í:
ллŶ
wzmlxl ÓÚ 2011-02-15 20:55:11·¢±í:
Ö§³Öһϣ¬Ñ§Ï°ÁË(o):tx°¢ÈøµÂ·¨Ê¦µÄ·¨¶¨·Ö
wzmlxl ÓÚ 2011-02-15 20:55:07·¢±í:
Ö§³Öһϣ¬Ñ§Ï°ÁË(o):tx
Ëæ±ã521241 ÓÚ 2011-02-14 17:53:18·¢±í:
ºÃ
qxhong ÓÚ 2011-01-30 09:51:30·¢±í:
²»ÖªÈçºÎ£¬ÏÈ¿´¿´
luguanhuang ÓÚ 2011-01-15 17:34:01·¢±í:
ºÃ¶«Î÷ ллÁË
yyxl ÓÚ 2010-12-08 15:46:17·¢±í:
Èç¹ûÎÒ²»¿ª·¢¿Í»§¶Ë³ÌÐò¡£¶øÊÇͨ¹ýä¯ÀÀÆ÷·ÃÎÊ·þÎñÆ÷µÄÒѾ´ò¿ªµÄ¶Ë¿Ú£¬ÈçºÎ°ÑÏëÊä³öµÄÄÚÈÝÊä³öµ½ä¯ÀÀÆ÷¡£Ò²¾ÍÊÇÓÃcÓïÑÔʵÏÖhttp·þÎñÆ÷¡£
ruthless369 ÓÚ 2010-11-30 16:55:31·¢±í:
Ö§³Ö£¡
Ö§³Ö£¡
742597408 ÓÚ 2010-11-29 14:43:34·¢±í:
ºÃ£¬¸ßÊÖ¾ÍÊǸßÊÖ
xiaobing259 ÓÚ 2010-11-29 14:37:37·¢±í:
{:3_107:}
xue_1103 ÓÚ 2010-11-23 15:06:38·¢±í:
ºÃ¶«Î÷£¬ÊÕ²Ø
ѩɽʨ×Ó ÓÚ 2010-09-27 20:28:16·¢±í:
ÊܽÌÁË
maoyin123 ÓÚ 2010-09-25 20:03:09·¢±í:
Õâɶ¸úɶѽ£¬Ð´Õâô¶à£¬À´µãʵÓõÄ
ÃÞ°À¼Ó¶Ì¿ã ÓÚ 2010-09-23 15:46:54·¢±í:
:0()w(1
ÃÞ°À¼Ó¶Ì¿ã ÓÚ 2010-09-22 15:15:26·¢±í:
{:2_91:}
pengdekai5 ÓÚ 2010-09-22 06:19:32·¢±í:
ºÜºÃºÜÇ¿´ó~£¡£¡
pengdekai5 ÓÚ 2010-09-22 06:19:27·¢±í:
ºÜºÃºÜÇ¿´ó~£¡£¡
lvhuan198988 ÓÚ 2010-09-21 10:35:40·¢±í:
zhizhizhzihzihds;kljh;fkljs;dlfkjgklwdfgh
zhangbohtz ÓÚ 2010-02-04 18:01:52·¢±í:
¹þ¹þ
yarges ÓÚ 2010-02-03 11:50:56·¢±í:
´ó¸çÄܲ»ÄܾßÌå½éÉÜÒ»ÏÂipv6ºÍipv4µÄ»¥²Ù×÷ÐÔ
sherwinwang ÓÚ 2009-12-24 23:39:50·¢±í:
thanks for sharing!
longyun ÓÚ 2009-12-21 20:06:58·¢±í:
°ïÂ¥Ö÷°ÑÎļþ²¹È«£¬Ï£ÍûÂ¥Ö÷Ï´ΰɳÌÐòдÍêÕû£¬·ñÔò³õѧÕß»áһͷÎíË®µÄ£¡¼ÓÓÍ£¡
#include
#include
#include
#include
#include
#include
#include
longyun ÓÚ 2009-12-11 19:09:42·¢±í:
Â¥Ö÷£¬×îºÃÄÜ·¢Ð©Ïà¹ØÊé¼® лл
k2eats ÓÚ 2007-09-22 11:19:16·¢±í:
²»´í£¬ºÃ¶«Î÷
huangchun ÓÚ 2007-04-30 10:43:39·¢±í:
²»´í ллÁË
yanch ÓÚ 2006-09-29 15:14:35·¢±í:
Ϊʲô#includeºóÃæûÓж«Î÷ѽ!
ǧֽº× ÓÚ 2006-09-27 10:29:38·¢±í:
ÓкöàÎÄÕ¶¼ÊǽéÉܹØÓÚ¿Í»§¶ËÓë·þÎñÆ÷¶ÎµÄÁ¬½ÓÎÊÌâ
ÓÐûÓйØÓÚ´«ËÍÒ»¸öÎļþµÄ֪ʶÄØ£¿ÀýÈçһƪÎÄÕ»òÕßÒ»¸öÍøÕ¾µÄHTMLÔ´´úÂëʲôµÄ¡£
61.144.42.* ÓÚ 2006-07-13 22:40:11·¢±í:
Äܲ»ÄÜÌùһЩ¸üÉîµÄ£¬±ÈÈç˵£¬ÎÒ×î½üÕýÔÚдһ¸ö´úÀíFTP°üµÄ´úÀí·þÎñÆ÷³ÌÐò£¬¿àÎÞ×ÊÁϲ鿴£¡^_^!»¶ÓÁªÂç:l-xiangjiaoxian@126.com
61.144.42.* ÓÚ 2006-07-13 22:40:01·¢±í:
Äܲ»ÄÜÌùһЩ¸üÉîµÄ£¬±ÈÈç˵£¬ÎÒ×î½üÕýÔÚдһ¸ö´úÀíFTP°üµÄ´úÀí·þÎñÆ÷³ÌÐò£¬¿àÎÞ×ÊÁϲ鿴£¡^_^!»¶ÓÁªÂç:l-xiangjiaoxian@126.com
61.144.42.* ÓÚ 2006-07-13 22:38:17·¢±í:
Äܲ»ÄÜÌùһЩ¸üÉîµÄ£¬±ÈÈç˵£¬ÎÒ×î½üÕýÔÚдһ¸ö´úÀíFTP°üµÄ´úÀí·þÎñÆ÷³ÌÐò£¬¿àÎÞ×ÊÁϲ鿴£¡^_^!
huanglu ÓÚ 2006-04-13 23:42:51·¢±í:
socket ÓзÇ×èÈûºÍ×èÈûÁ½ÖÖ·½Ê½£¬ÎÒÔÚÍøÉÏ¿´µ½·Ç×èÈûµÄ²ÅÖ§³Ö¶à¸ö¿Í»§¶ËµÄÁ¬½Ó£®£¿£¿
RedSnow ÓÚ 2005-11-20 23:11:16·¢±í:
½øÐÐlinux cÍøÂç±à³Ì£¬ÐèÒªÉîÈëÁ˽âlinux c¿âº¯Êý²Î¿¼ÊÖ²áµÄÏà¹ØÄÚÈÝ£¬±Ø²»¿ÉÉÙµÄÊǵÚ19ÕÂ-SocketÏà¹Øº¯Êý£¬µ«¹ØÓÚÕâÒ»²¿·Ö£¬ÓÉÓÚ°æ±¾µÄ²»Í¬£¬ÏàÓ¦µÄÊý¾Ý½á¹¹ÖеÄÊý¾ÝÀàÐÍ×ֶζàÉÙÓгöÈ룬±ÈÈ磺
struct sockaddr_in {
uint8_t sin_len; /* ÎÞ·ûºÅµÄ8λÕûÊý */
sa_family_t sin_family; /* Ì×½Ó¿ÚµØÖ·½á¹¹µÄµØÖ·´Ø£¬ÕâÀïΪAF_INET */
in_port_t sin_port; /* TCP»òUDP¶Ë¿Ú */ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ ¡¡
struct in_addr sin_addr;
char sin_zero[8];
};¡¡ºÍ
struct sockaddr_in {
unsiged short int sin_len;
short int sin_family;
unsiged short int sin_port;
struct in_addr sin_addr;
unsiged char sin_zero[8];
};
....µ±È»£¬»¹ÓÐÆäËûд·¨[ÖÁÉÙÎÒ¼û¹ý£¬²¢²»½ö½ö¾ÖÏÞÓÚ´Ë]£¬ÓÐʱºÜÄÑ°ÑÎÕËüÃǵ½µ×ΪºÎÖÖÊý¾ÝÀàÐÍ£¬Òò¶ø£¬ÔÚ±à³Ìʱ»áÓжദ¾¯¸æÓÉ´ËÒýÆð¡£
ÔÚ´Ë£¬Çë½ÌÖîλͬÈÊ£¬linux c¿âº¯Êý²Î¿¼ÊÖ²á×îаæÊÇÄÄÒ»°æ£¿ÄÜ·ñ¹²Ïíһϣ¿....лл£¡£¡£¡¡¡¡¡¡¡¡¡¡¡
cheshi ÓÚ 2005-11-12 11:02:21·¢±í:
ºÃ¶«Î÷£¬ÊÕ²ØÁË£¬¸ÐлING
·çÓêÎÞ×è ÓÚ 2005-09-29 00:21:39·¢±í:
²»´í£¬Ö§³Ö
WWW ÓÚ 2005-09-02 00:22:49·¢±í:
Ö§³Ö
ming ÓÚ 2005-07-20 00:09:11·¢±í:
Ö§³Ö
Â¥À¼Õ½Ê¿ ÓÚ 2005-06-16 15:57:51·¢±í:
Èç¹ûÎÒ²»¿ª·¢¿Í»§¶Ë³ÌÐò¡£¶øÊÇͨ¹ýä¯ÀÀÆ÷·ÃÎÊ·þÎñÆ÷µÄÒѾ´ò¿ªµÄ¶Ë¿Ú£¬ÈçºÎ°ÑÏëÊä³öµÄÄÚÈÝÊä³öµ½ä¯ÀÀÆ÷¡£Ò²¾ÍÊÇÓÃcÓïÑÔʵÏÖhttp·þÎñÆ÷¡£