linux 网络地址
http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201121505130366/
Linux網絡編程----IP轉換函數--inet_addr和inet_ntoa?
Linux下IP轉換工具::
#Include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
?
strcut sockaddr_in?? src;
?
src.sin_addr.s_addr?? =? inet_addr("*.*.*.*");???????????????? //構建網絡地址。
?
printf("%s\n",inet_ntoa(src.sin_addr));???????????? //將網絡地址轉換成字符串。
?
?
注意::
inet_ntoa存在的問題是inet_ntoa的返回值是一個static類型的char *指針,所以會出現問題::
?
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
?
原因是靜態的static?? char *
Linux網絡通信----網絡地址構建struct sockaddr_in??
Linux下網絡編程,一般需要包含的頭文件包括:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#Include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
?
Linux下網絡地址有:
struct??? sockaddr
{
???????????unsigned? int? sin_family;????????????????? //取值AF_INET;
???????????char?? sa_data[14];
}
這種結構不常用,常用的是:
struct??? sockaddr_in
{
??????????short int sin_family;?????????????????????????? //取值AF_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地址。
?????????}
?
?
所以創建一個網絡地址::
?
?????????????? strcut? sockaddr_in??? src;
???????????????src.sin_family? = AF_INET;
?????????????? src.sin_addr.s_addr?? =??? inet_addr("*.*.*.*");
???????????????bzero(src.sin_zero,8);
?
其中用到了,inet_addr是linux提供的網絡編程中使用的IP轉換工具。
?????????????? inet_addr("*.*.*.*");將字符串IP地址轉換成網絡地址,并且是網絡字節序的。
???????????????相反的轉換工具有inet_ntoa等。
總結
以上是生活随笔為你收集整理的linux 网络地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoMake文档
- 下一篇: 字库转位图--