Éî¶È½â¶ÁLinuxÐÒéÕ»µÄÒªº¦×é³É²¿·Ö
Linux²Ù×÷ϵͳ×÷Ϊһ¸ö¿ªÔ´ÏµÍ³£¬ÔÚÍøÂçͨѶÁìÓòÌåÏÖ¾«²Ê£¬ÆäÖеÄÐÒéÕ»±»ÒÔΪÊÇÒªº¦×é³É²¿·ÖÖ®Ò»¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«Éî¶È½â¶ÁLinuxÐÒéÕ»µÄÒªº¦×é³É²¿·Ö£¬°üÀ¨ÍøÂç½Ó¿Ú¡¢Ì×½Ó×Ö¡¢TCP/IPÐÒéÕ»µÈ£¬Í¨¹ýÏêϸµÄ´úÂëʾÀýÀ´×ÊÖú¶ÁÕ߸üºÃµØÃ÷È·¡£
1. ÍøÂç½Ó¿Ú
ÍøÂç½Ó¿ÚÊÇLinuxÐÒéÕ»ÖÐ×îµ×²ãµÄÒ»¸ö×é³É²¿·Ö£¬ÈÏÕæʵÏÖÍøÂçÊý¾Ý°üµÄÊÕ·¢¡£ÔÚLinuxÖУ¬ÍøÂç½Ó¿Úͨ¹ý×°±¸Çý¶¯³ÌÐòÀ´ÊµÏÖ£¬Ã¿¸öÍøÂç½Ó¿Ú¶¼ÓÐÒ»¸öΨһµÄ±êʶ·û£¬ÀýÈçeth0¡¢eth1µÈ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýifconfigÏÂÁîÀ´Éó²éÄ¿½ñϵͳÖеÄÍøÂç½Ó¿ÚÐÅÏ¢£¬ÈçÏÂËùʾ£º
ifconfig
µÇ¼ºó¸´ÖÆ
ÔÚLinuxÖУ¬ÍøÂç½Ó¿ÚµÄÌ×½Ó×ֵصã½á¹¹½ç˵ÔÚ<linux/if.h>Í·ÎļþÖУ¬³ÌÐòÔ±¿ÉÒÔͨ¹ýŲÓÃsocket()ºÍbind()À´½¨ÉèÒ»¸ö°ó¶¨µ½Ö¸¶¨ÍøÂç½Ó¿ÚµÄÌ×½Ó×Ö¡£ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄʾÀý´úÂ룺
#include <sys/types.h> #include <sys/socket.h> #include <linux/if.h> int main() { int sockfd; struct sockaddr sa; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd < 0) { perror("socket"); return -1; } struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); strcpy(ifr.ifr_name, "eth0"); if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, (void*)&ifr, sizeof(ifr)) < 0) { perror("setsockopt"); close(sockfd); return -1; } close(sockfd); }
µÇ¼ºó¸´ÖÆ
2. Ì×½Ó×Ö
Ì×½Ó×ÖÊÇLinuxÐÒéÕ»ÖеÄÖÐÐļþ£¬ÈÏÕæ´¦ÀíÓ¦ÓòãºÍ´«Êä²ãÖ®¼äµÄͨѶ¡£ÔÚLinuxÖУ¬Ì×½Ó×Ö½Ó¿Ú½ç˵ÔÚ Í·ÎļþÖУ¬³ÌÐòÔ±¿ÉÒÔͨ¹ýsocket()¡¢bind()¡¢listen()¡¢accept()¡¢connect()µÈº¯ÊýÀ´½¨ÉèºÍÖÎÀíÌ×½Ó×Ö¡£
ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄTCPЧÀÍÆ÷ʾÀý´úÂ룬ʵÏÖÁËÒ»¸ö»ùÓÚÌ×½Ó×ֵļòÆÓEchoЧÀÍÆ÷£º
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <string.h> #define PORT 8080 int main() { int sockfd, new_sockfd; struct sockaddr_in server_addr, client_addr; char buffer[1024]; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { perror("socket"); return -1; } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(PORT); if(bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("bind"); return -1; } listen(sockfd, 5); while(1) { int addrlen = sizeof(client_addr); new_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen); memset(buffer, 0, sizeof(buffer)); read(new_sockfd, buffer, sizeof(buffer)); write(new_sockfd, buffer, strlen(buffer)); close(new_sockfd); } close(sockfd); return 0; }
µÇ¼ºó¸´ÖÆ
3. TCP/IPÐÒéÕ»
ÔÚLinuxÖУ¬TCP/IPÐÒéջʵÏÖÁËÍøÂçͨѶÖеĴ«Êä²ãºÍÍøÂç²ãÐÒ飬ÀýÈçTCP¡¢UDP¡¢IPµÈ¡£³ÌÐòÔ±¿ÉÒÔͨ¹ýsocket()º¯ÊýÀ´½¨ÉèÒ»¸öTCP»òUDPÌ×½Ó×Ö£¬Í¨¹ýconnect()º¯Êý½¨ÉèÅþÁ¬£¬Í¨¹ýsend()ºÍrecv()º¯Êý·¢ËͺÍÎüÊÕÊý¾Ý¡£
ÏÂÃæÊÇÒ»¸ö¼òÆÓµÄTCP¿Í»§¶ËʾÀý´úÂ룬ʵÏÖÁËÏòEchoЧÀÍÆ÷·¢ËÍÊý¾Ý²¢ÎüÊÕÏìÓ¦£º
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #define PORT 8080 #define SERVER_IP "127.0.0.1" int main() { int sockfd; struct sockaddr_in server_addr; char buffer[1024]; sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd < 0) { perror("socket"); return -1; } server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(SERVER_IP); server_addr.sin_port = htons(PORT); if(connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { perror("connect"); return -1; } strcpy(buffer, "Hello, Server!"); write(sockfd, buffer, strlen(buffer)); memset(buffer, 0, sizeof(buffer)); read(sockfd, buffer, sizeof(buffer)); printf("Server response: %s ", buffer); close(sockfd); return 0; }
µÇ¼ºó¸´ÖÆ
ͨ¹ýÒÔÉÏʾÀý´úÂ룬¶ÁÕß¿ÉÒÔ¸üÉîÈëµØÏàʶLinuxÐÒéÕ»µÄÒªº¦×é³É²¿·Ö£¬°üÀ¨ÍøÂç½Ó¿Ú¡¢Ì×½Ó×ÖºÍTCP/IPÐÒéÕ»¡£Ï£Íû±¾ÎÄÄܹ»×ÊÖú¶ÁÕ߸üºÃµØÃ÷È·LinuxÍøÂçͨѶµÄµ×²ãÔÀí£¬ÒÔ¼°ÔõÑùͨ¹ý´úÂëÀ´ÊµÏÖÍøÂçÓ¦Óá£
ÒÔÉϾÍÊÇÉî¶È½â¶ÁLinuxÐÒéÕ»µÄÒªº¦×é³É²¿·ÖµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡