Linux网络编程基础

来源:互联网 发布:极右势力的网络保护伞 编辑:程序博客网 时间:2024/04/29 11:01

 一、TCP/IP结构:


二、字节序

1、 

#include <arpa/inet.h>
主机字节序转换为网络字节序:
       uint32_t htonl(uint32_t hostlong);//把主机长整形数转换为网络的长整形数//long一般用于转换IP地址,short一般用于转换端口;
       uint16_t htons(uint16_t hostshort);
网络字节序转换为主机字节序:
       uint32_t ntohl(uint32_t netlong);
       uint16_t ntohs(uint16_t netshort);

举例:

#include<stdio.h>#include<arpa/inet.h>int main(){      int ipcount=0x01234567;      int ipnet=htonl(ipcount);      printf("old is %d\n",ipcount);      printf("new is %d\n",ipnet);      return 0;}


2、IP地址其实质是int类型的;而在传输过程中是字符串类型的;

IP地址转换:IP地址实际的值和显示的字符字符串之间的转换;

       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>


       int inet_aton(const char *cp, struct in_addr *inp);

功能:把字符串形式的IP地址转换为其实际值(int),把其值存放在inp结构体中了;
       in_addr_t inet_addr(const char *cp);

       in_addr_t inet_network(const char *cp);


       char *inet_ntoa(struct in_addr in);
功能:把int类型的IP地址的值转换为字符串类型的IP地址;

参数:in是IP地址的值;

       struct in_addr inet_makeaddr(int net, int host);


       in_addr_t inet_lnaof(struct in_addr in);


       in_addr_t inet_netof(struct in_addr in);

举例:

#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdio.h>int main(){       struct in_addr my_addr;       inet_aton("192.168.0.1",&my_addr);       printf("addr to net is :%d\n",my_addr.s_addr);       printf("addr  is :%s\n",inet_ntoa(my_addr));       return 0;}~
运行结果:

[root@localhost app_code]# ./aton_addr
addr  to net is :16820416
addr  is :192.168.0.1


#include<netdb.h>

struct  hostent  *gethostbyname(const  chat  *name);

struct  hostent

{

       char *h_name;

char **h_aliases;

int h_addrtype;

int h_length;

char **h_addr_list;

#define  h_addr   h_addr_list[0];

}

#Include<sys/socket.h>

struct  hostent *gethostbyaddr(const  void  *addr,socklen_t  len,int type);


举例:

#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<stdio.h>#include<netdb.h>int main(){       struct in_addr myaddr;       struct hostent *myhost;       myhost=gethostbyname("www.baidu.oom");       myaddr.s_addr=(uint32_t)(myhost->h_addr);       printf("www.baidu.com IP is:%s\n",inet_ntoa(myaddr));       return 0;}~
运行结果:

[root@localhost app_code]# ./gethostbyname
www.baidu.com IP is:208.113.116.1

0 0
原创粉丝点击