;
¡@¡@int bind(int socketfd,struct sockaddr_in ¡¯localaddr,sizeof(localaddr));
¡@¡@¨ä¤¤¡G(1)²Ä¤@ӰѼÆsocketfd¬O«e¨Bsocket()¨t²Î½Õ¥Îªð¦^ªº®M¸`¦r´yz²Å¡C
¡@¡@(2)²Ä¤GӰѼƳQ®¹¦V¥»¦a¦a§}ªº¤@ºØµ²ºc¡A¸Óµ²ºc¦bsys/netinet/in.h¤¤©w¸q¡G
¡@¡@struct sockaddr_in{
¡@¡@¡@short sin_family;/¡¯socket()¨t²Î½Õ¥Îªº¨óij±Ú¦pAF_INET¡¯/
¡@¡@¡@u_short sin_port;/¡¯ºô¸ô¦r¸`¦¸§Ç§Î¦¡ªººÝ¤f¸¹½X¡¯/
¡@¡@¡@struct in_addr sin_addr;/¡¯ºô¸ô¦r¸`¦¸§Ç§Î¦¡ªººô¸ô¦a§}¡¯/
¡@¡@¡@char sin_zero[8];
¡@¡@}
¡@¡@¤@¥x¾÷¾¹¤Wªº¨CÓºô¸ôµ{¦¡¨Ï¥Î¤@Ó¦U¦Û¿W¥ßªººÝ¤f¸¹½X¡A¨Ò¦p¡Gtelnetµ{¦¡¨Ï¥ÎºÝ¤f¸¹23¡A¦Óftp¤å¥ó¶Ç¿éµ{¦¡¨Ï¥ÎºÝ¤f¸¹21¡C§Ú̦b³]pÀ³¥Îµ{¦¡®É¡AºÝ¤f¸¹½X¥i¥H¥Ñgetservbyname()¨ç¼Æ±q/etc/services®w¤å¥ó¤¤Àò¨ú¡A¤]¥i¥H¥Ñhtons (int portnum)¨ç¼Æ±N¥ô·N¥¿¾ã¼ÆÂà´«¬°ºô¸ô¦r¸`¦¸§Ç§Î¦¡¨Ó±o¨ì¡A¦³¨Çª©¥»ªºUNIX§@·~¨t²Î«h³W©w1024¥H¤UªººÝ¤f¸¹½X¥u¥i³Q¶W¯Å¥Î¤á¨Ï¥Î¡A´¶³q¥Î¤áµ{¦¡¨Ï¥ÎªººÝ¤f¸¹½X¥u¤_1025¨ì32767¤§¶¡¡Cºô¸ô¦a§}¥i¥H¥Ñgethostbyname(char¡¯hostname)¨ç¼Æ±o¨ì(¸Ó¨ç¼Æ©Mgetservbyname()¤@¼Ë³£¥Hºô¸ô¦r¸`¦¸§Ç§Î¦¡ªð¦^©Ò¦³¦b¥L̵²ºc¤¤ªº¼Æ¾Ú)¡A°Ñ¼Æhostname¬°/etc/hosts¤å¥ó¤¤¬Y¤@ºô¸ô¦a§}©Ò¹ïÀ³ªº¾÷¾¹¦W¡C¸Ó¨ç¼Æªð¦^¤@ÓÃþ«¬¬°hostentªºµ²ºc«ü°w¡Ahostentµ²ºc¦bnetdb.h¤¤©w¸q¡G
¡@¡@struct hostent{
¡@¡@ char ¡¯h_name;
¡@¡@ char ¡¯¡¯h_aliases;
¡@¡@ int h_addrtype;
¡@¡@ int h_length;¡@¡@/¡¯¦a§}ªø«×¡¯/
¡@¡@ char ¡¯¡¯h_addr_list;
¡@¡@ ¡define h_addr h_addr_list[0];/¡¯¦a§}¡¯/
¡@¡@}
¡@¡@(3)²Ä¤TӰѼƬ°²Ä¤GÓµ²ºc°Ñ¼Æªºªø«×¡A¦pªG½Õ¥Î¦¨¥\¡Abindªð¦^0¡A§_«h±Nªð¦^¡Ð1¨Ã³]¸merrno¡C
¡@¡@3.¦øªA¾¹ºÝ¨t²Î½Õ¥Îlisten¡A¨Ï¦øªA¾¹Ä@·N±µ¨ü³s±µ
¡@¡@®æ¦¡¡Gint listen(int socketfd,int backlong)
¡@¡@¥¦³q±`¦bsocket©Mbind½Õ¥Î«á¦baccept½Õ¥Î«e°õ¦æ¡C²Ä¤GӰѼƫü©ú¦bµ¥«Ý¦øªA¾¹°õ¦æaccept½Õ¥Î®É¨t²Î¥i¥H±Æ¶¤¦h¤ÖÓ³s±µn¨D¡C¦¹°Ñ¼Æ±`«ü©w¬°5¡A¤]¬O¥Ø«e¤¹³\ªº³Ì¤jÈ¡C
¡@¡@4.¦øªA¾¹½Õ¥Îaccept,¥Hµ¥«Ý«È¤á¾÷½Õ¥Îconnect¶i¦æ³s±µ¡C®æ¦¡¦p¤U¡G
¡@¡@int newsocket=(int socketfd,struct sockaddr_in ¡¯peer,int¡¯addrlen);
¡@¡@¸Ó½Õ¥Î¨ú±o¶¤¦C¤Wªº²Ä¤@Ó³s±µ½Ð¨D¨Ã«Ø¥ß¤@Ө㦳»Psockfd¬Û¦P¯S©Êªº®M¸`¦r¡C¦pªG¨S¦³µ¥«Ýªº³s±µ½Ð¨D¡A¦¹½Õ¥Îªý¶ë½Õ¥ÎªÌª½¨ì¤@³s±µ½Ð¨D¨ì¹F¡C³s±µ¦¨¥\«á¡A¸Ó½Õ¥Î±N¥Î¹ïºÝªº¦a§}µ²ºc©M¦a§}ªø«×¶ñ¥R°Ñ¼Æpeer©Maddlen¡A¦pªG¹ï«È¤áºÝªº¦a§}¸ê°T¤£·P¿³½ì¡A³o¨âӰѼƥÎ0¥N´À¡C
¡@¡@5.«È¤áºÝ½Õ¥Îconnect()»P¦øªA¾¹«Ø¥ß³s±µ¡C®æ¦¡¬°¡G
¡@¡@connect(int socketfd,struct sockaddr_in ¡¯servsddr,int addrlen)
¡@¡@«È¤áºÝ¨ú±o®M±µ¦r´yz²Å«á¡A¥Î¸Ó½Õ¥Î«Ø¥ß»P¦øªA¾¹ªº³s±µ¡A°Ñ¼Æsocketfd¬°socket()¨t²Î½Õ¥Îªð¦^ªº®M¸`¦r´yz²Å¡A²Ä¤G©M²Ä¤TӰѼƬO«ü¦V¥Øªº¦a§}ªºµ²ºc¤Î¥H¦r¸`p¶qªº¥Øªº¦a§}ªºªø«×(³o¸Ì¥Øªº¦a§}À³¬°¦øªA¾¹¦a§})¡C½Õ¥Î¦¨¥\ªð¦^0¡A§_«h±Nªð¦^¡Ð1¨Ã³]¸merrno¡C
¡@¡@6.³q¹L³n´¡®yµo°e¼Æ¾Ú
¡@¡@¤@¥¹«Ø¥ß³s±µ¡A´N¥i¥H¥Î¨t²Î½Õ¥Îread©Mwrite¹³´¶³q¤å¥ó¨º¼Ë¦Vºô¸ô¤Wµo°e©M±µ¨ü¼Æ¾Ú¡CRead±µ¨ü¤TӰѼơG¤@Ó¬O®M¸`¦r´yz²Å¡F¤@Ó¬°¼Æ¾Ú±N³Q¶ñ¤Jªº½w½Ä°Ï¡AÁÙ¦³¤@Ó¾ã¼Æ«ü©únŪªº¦r¸`¼Æ¡A¥¦ªð¦^¹ê»ÚŪ¤Jªº¦r¸`¼Æ¡A¥X¿ù®Éªð¦^¡Ð1¡A¹J¨ì¤å¥ó§À«hªð¦^0¡CWrite¤]±µ¨ü¤TӰѼơG¤@Ó¬O®M¸`¦r´yz²Å¡F¤@Ó¬°«ü¦V»Ýnµo°e¼Æ¾Úªº½w½Ä°Ï¡AÁÙ¦³¤@Ó¾ã¼Æ«ü©ún¼g¤J¤å¥óªº¦r¸`ӼơA¥¦ªð¦^¹ê»Ú¼g¤Jªº¦r¸`¼Æ¡A¥X¿ù®Éªð¦^¡Ð1¡C·íµM¡A¤]¥i¥H½Õ¥Îsend©Mrecv¨Ó¹ï®M¸`¦r¶i¦æÅª¼g¡A¨ä½Õ¥Î»P°ò¥»ªºread©Mwrite¨t²Î½Õ¥Î¬Û¦ü¡A¥u¬O¦h¤F¤@Óµo°e¤è¦¡°Ñ¼Æ¡C
¡@¡@7.°h¥Xµ{¦¡®É¡AÀ³«ö¥¿±`¤è¦¡Ãö³¬®M¸`¦r¡C®æ¦¡¦p¤U¡G
¡@¡@int close(socketfd)
¡@¡@«e±¤¶²Ð¤FUNIX«È¤á/¦øªA¾¹¼Ò¦¡ºô¸ô½sµ{ªº°ò¥»«ä¸ô©M¨BÆJ¡Cȱo«ü¥Xªº¬Osocket½sµ{©Ò¯A¤Îªº¨t²Î½Õ¥Î¤£ÄÝ©ó°ò¥»¨t²Î½Õ¥Î½d³ò¡A¨ä¨ç¼Æì§Î¦blibsocket.a¤å¥ó¤¤¡A¦]¦¹¡A¦b¥Îcc©R¥O¹ïìµ{¦¡¶i¦æ½sͮɻÝn±a¡Ðlsocket¿ï¶µ¡C
¡@¡@²{¦b¡A§ÚÌ¥i¥H°w¹ï¤å³¹¶}ÀY´£¥Xªº°ÝÃDµÛ¤â¶i¦æ½sµ{¤F¡C¦b¹Ï¥Üªººô¸ôµ²ºc¤¤¡A¬°¨Ï¤¤¤ß¾÷©Ðªº¦øªA¾¹¯à©MºôÂI¤Wªº«È¤á¾÷¶i¦æ³q«H¡A»Ý¦b¦øªA¾¹ºÝ²K¥[³q¹L¸ô¥Ñ¾¹1úP1úP1úP2¨ì«È¤á¾÷ªº¸ô¥Ñ¡A¨â¥x«È¤á¾÷¤]¥²¶·²K¥[³q¹L¸ô¥Ñ¾¹2úP2úP2úP1¨ì¦øªA¾¹ªº¸ô¥Ñ¡C¦b¦øªA¾¹ªº/etc/hosts¤å¥ó¤¤À³¸Ó¥]§t¤U±¤º®e¡G
¡@¡@1.1.1.1¡@¡@server
¡@¡@2.2.2.2¡@¡@cli1
¡@¡@2.2.2.3¡@¡@cli2
¡@¡@«È¤á¾÷ªº/etc/hosts¤å¥ó¤¤À³¸Ó¦³¥»¾÷¦a§}¸ê°T©M¦øªA¾¹ªº¦a§}¸ê°T¡A¦pcli1«È¤á¾÷ªº/etc/hosts¤å¥ó¡G
¡@¡@2.2.2.2¡@¡@cli1
¡@¡@1.1.1.1¡@¡@server
¡@¡@ºô¸ôÀô¹Ò·f«Ø¦n«á¡A§ÚÌ¥i¥H¦b¦øªA¾¹ºÝ½s¼gfwq.cµ{¦¡¡At³d±µ¨ü«È¤á¾÷ªº³s±µ½Ð¨D¡A¨Ã±N±q·½¤å¥ó¤¤Åª¨úªº¼Æ¾Úµo°e¨ì«È¤á¾÷¡C«È¤á¾÷µ{¦¡khj.c¦V¦øªA¾¹µo°e³s±µ½Ð¨D¡A±µ¦¬±q¦øªA¾¹ºÝµo¨Óªº¼Æ¾Ú¡A¨Ã±N±µ¦¬¨ìªº¼Æ¾Ú¼g¤J¥Ø¼Ð¤å¥ó¡C·½µ{¦¡¦p¤U¡G
/¡¯¦øªA¾¹·½µ{¦¡fwq.c¡¯/
¡include;
¡include;
¡include;
¡include;
¡include;
¡include;
¡include;
main()
{
¡@¡@char c,buf[1024],file[30];
¡@¡@int fromlen,source;
¡@¡@register int k,s,ns;
¡@¡@struct sockaddr_in sin;
¡@¡@struct hostent ¡¯hp;
¡@¡@system(¡²clear¡²);
¡@¡@printf(¡²\n¡²);
¡@¡@
¡@¡@printf(¡²\n\n\t\t¿é¤Jn¶Ç¿éªº¤å¥ó¦W¡G¡²)¡F
¡@¡@scanf(¡²¢Hs¡²,file);
¡@¡@if ((source=open(file,O_RDONLY))<0){
¡@¡@¡@perror(¡²·½¤å¥ó¥´¶}¥X¿ù¡²)¡F
¡@¡@¡@exit(1);
¡@¡@}
¡@¡@printf(¡²\n\t\t¦b¶Ç°e¤å¥ó¡AµyÔ¡K¡²)¡F
¡@¡@hp=gethostbyname(¡²server¡²);
¡@¡@if (hp==NULL){
¡@¡@ perror(¡²ªð¦^¥D¾÷¦a§}¸ê°T¿ù!!!¡²)¡F
¡@¡@ exit(2);
¡@¡@}
¡@¡@s=socket(AF_INET,SOCK_STREAM,0);
¡@¡@if(s<0){
¡@¡@ perror(¡²Àò¨úSOCKET¸¹¥¢±Ñ!!!¡²)¡F
¡@¡@ exit(3);
¡@¡@}
¡@¡@sin.sin_family=AF_INET;
¡@¡@sin.sin_port=htons(1500);/¡¯¨Ï¥ÎºÝ¤f1500¡¯/
¡@¡@bcopy(hp¡Ð>;h_addr,¡®sin.sin_addr,hp¡Ð>;h_length);
¡@¡@if(bind(s,¡®sin,sizeof(sin))<0){
¡@¡@¡@perror(¡²¤£¯à±N¦øªA¾¹¦a§}®¹¸j¨ìSOCKET¸¹¤W!!!¡²)¡F
¡@¡@¡@colse(s);
¡@¡@¡@exit(4);
¡@¡@}
¡@¡@if(listen(s¡A5)<0{
¡@¡@¡@perror(¡²sever:listen¡²);
¡@¡@¡@exit(5);
¡@¡@}
while(1){
¡@¡@if((ns=accept(s,¡®sin,¡®fromlen))<0){
¡@¡@¡@perror(¡²sever:accept¡²)¡F
¡@¡@¡@exit(6);
¡@¡@}
¡@¡@lseek(source,OL,0);/¡¯¨C¦¸±µ¨ü«È¤á¾÷³s±µ¡AÀ³±N¥Î©óŪªº·½¤å¥ó«ü°w²¾¨ì¤å¥óÀY¡¯/
¡@¡@write(ns,file,sizeof(file))¡F /¡¯µo°e¤å¥ó¦W¡¯/
¡@¡@while((k=read(source,buf,sizeof(buf)))>;0)
¡@¡@ write(ns,buf,k);
¡@¡@printf(¡²\n\n\t\t¶Ç¿é§¹²¦!!!\n¡²);
¡@¡@close(ns);
}
¡@¡@close(source);
¡@¡@exit(0);
¡@¡@/¡¯«È¤á¾÷·½µ{¦¡khj.c¡¯/
¡@¡@¡include;
¡@¡@¡include;
¡@¡@¡include;
¡@¡@¡include;
¡@¡@¡include;
¡@¡@¡include;
¡@¡@¡include;
¡@¡@¡include ;
¡@¡@main()
¡@¡@{
¡@¡@¡@char buf[1024],file[30];
¡@¡@¡@char ¡¯strs=¡²\n\n\t\t¥¿¦b±µ¦¬¤å¥ó¡²¡F
¡@¡@¡@int target;
¡@¡@¡@register int k,s;
¡@¡@¡@struct sockaddr_in sin;
¡@¡@¡@struct hostent ¡¯hp;
¡@¡@¡@system(¡²clear¡²);
¡@¡@¡@printf(¡²\n¡²);
¡@¡@¡@
¡@¡@¡@hp=gethostbyname(¡²server¡²);
¡@¡@¡@if(hp==NULL){
¡@¡@¡@¡@¡@¡@¡@¡@¡@¡@perror(¡²ªð¦^¦øªA¾¹¦a§}¸ê°T¿ù!!!¡²)¡F
¡@¡@ ¡@exit(1);
¡@¡@¡@}
¡@¡@¡@s=socket(AF_INET¡ASOCK_STREAM,0);
¡@¡@¡@if(s<0){
¡@¡@¡@¡@perror(¡²Àò¨úSOCKET¸¹¥¢±Ñ!!!¡²)¡F
¡@¡@¡@¡@exit(2);
¡@¡@¡@}
¡@¡@¡@sin.sin_family=AF_INET;
¡@¡@¡@sin.sin_port=htons(1500);/¡¯ºÝ¤f¸¹»Ý»P¦øªA¾¹µ{¦¡¨Ï¥Îªº¤@P¡¯/
¡@¡@¡@bcopy(hp¡Ð>;h_addr,¡®sin.sin_addr,hp¡Ð>;h_length);
¡@¡@¡@printf(¡²\n\n\t\t¥¿¦b»P¦øªA¾¹³s±µ¡K¡²)¡F
¡@¡@¡@if(connect(s,¡®sin,sizeof(sin),0)<0){
¡@¡@¡@¡@perror(¡²¤£¯à»P¦øªA¾¹³s±µ!!!¡²)¡F
¡@¡@¡@¡@exit(3);
¡@¡@¡@}
¡@¡@¡@while((k=read(s,file,sizeof(file)))<=0/¡¯±µ¦¬¤å¥ó¦W¡¯/
¡@¡@ if((target=open(file,o_WRONLY|O_CREAT|O_TRUNC,0644))<0){
¡@¡@¡@¡@perror(¡²¤£¯à¥´¶}¥Ø¼Ð¤å¥ó!!¡²)¡F
¡@¡@¡@¡@exit(4);
¡@¡@}
¡@¡@strcat(strs,file);
¡@¡@strcat(strs,¡²¡AµyÔ¡K¡²)¡F
¡@¡@write(1,strs,strlen(strs));
¡@¡@while((k=read(s,buf,sizeof(buf)))>;0)
¡@¡@¡@write(tatget,buf,k);
¡@¡@printf(¡²\n\n\t\t±µ¦¬¤å¥ó¦¨¥\!!!\n¡²);
¡@¡@close(s);
¡@¡@close(target);
¡@¡@}
¡@¡@¤Wzµ{¦¡¦bSco Unix System v3.2¤ÎSco TCP/IP RumtimeÀô¹Ò¤U½Õ¸Õ³q¹L¡C