linux 网络地址
http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201121505130366/
Linux網(wǎng)絡(luò)編程----IP轉(zhuǎn)換函數(shù)--inet_addr和inet_ntoa?
Linux下IP轉(zhuǎn)換工具::
#Include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
?
strcut sockaddr_in?? src;
?
src.sin_addr.s_addr?? =? inet_addr("*.*.*.*");???????????????? //構(gòu)建網(wǎng)絡(luò)地址。
?
printf("%s\n",inet_ntoa(src.sin_addr));???????????? //將網(wǎng)絡(luò)地址轉(zhuǎn)換成字符串。
?
?
注意::
inet_ntoa存在的問題是inet_ntoa的返回值是一個static類型的char *指針,所以會出現(xiàn)問題::
?
char *a1,a2;
src.sin_addr.s_addr? =? inet_addr("192.168.1.123");
a1?? =inet_ntoa(src.sin_addr);??????????????????
src.sin_addr.s_addr = inet_addr("192.168.1.124");
a2 = inet_ntoa(src.sin_addr);
?
printf("a1:%s\n",a1);
顯示為::???????? a1:192.168.1.124
printf("a2:%s\n",a2);
顯示為:????????? a2:192.168.1.124
?
原因是靜態(tài)的static?? char *
Linux網(wǎng)絡(luò)通信----網(wǎng)絡(luò)地址構(gòu)建struct sockaddr_in??
Linux下網(wǎng)絡(luò)編程,一般需要包含的頭文件包括:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#Include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
?
Linux下網(wǎng)絡(luò)地址有:
struct??? sockaddr
{
???????????unsigned? int? sin_family;????????????????? //取值A(chǔ)F_INET;
???????????char?? sa_data[14];
}
這種結(jié)構(gòu)不常用,常用的是:
struct??? sockaddr_in
{
??????????short int sin_family;?????????????????????????? //取值A(chǔ)F_INET;
??????????unsigned short? int? sin_port;??????????? //取值htons(PORT);
????????? struct in_addr? sin_addr;?????????????????? //取值.sin_addr.s_addr = inet_addr("*.*.*.*");
????????? unsigned char sin_zero[8];????????????????//取值bzero(.sin_zero,8)或memset(.sin_zero,0,8);
}
其中:
?????????struct?? in_addr
???????? {
????????????????? unsigned long?? s_addr;???????????? //存儲IP地址。
?????????}
?
?
所以創(chuàng)建一個網(wǎng)絡(luò)地址::
?
?????????????? strcut? sockaddr_in??? src;
???????????????src.sin_family? = AF_INET;
?????????????? src.sin_addr.s_addr?? =??? inet_addr("*.*.*.*");
???????????????bzero(src.sin_zero,8);
?
其中用到了,inet_addr是linux提供的網(wǎng)絡(luò)編程中使用的IP轉(zhuǎn)換工具。
?????????????? inet_addr("*.*.*.*");將字符串IP地址轉(zhuǎn)換成網(wǎng)絡(luò)地址,并且是網(wǎng)絡(luò)字節(jié)序的。
???????????????相反的轉(zhuǎn)換工具有inet_ntoa等。
總結(jié)
以上是生活随笔為你收集整理的linux 网络地址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoMake文档
- 下一篇: Linux下的XAMPP基本配置技巧(设