Linux 网络编程之socket编程(一)

1、socket

    1)socket可以看成用户进程与内核协议栈的编程接口。

    2)socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。

2、ipv4套接字地址结构

struct sockaddr_in
{
    short sin_family;/*Address family一般来说AF_INET(地址族)PF_INET(协议族)*/
    unsigned short sin_port;/*Port number(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/
    struct in_addr sin_addr;/*IP address in network byte order(Internet address)*/
    unsigned char sin_zero[8];/*Same size as struct sockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/
};

通用的sockt地址结构

struct sockaddr {  
     sa_family_t sin_family;//地址族
    char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息               
   };

3、字节序

    字节序,即字节在内存或者网络传输是的序列。

    1)大端字节序

    大端字节序:是字节高位存储在内存低位,字节低位存储在内存高位。

    2)小端字节序

    小端字节序:是字节低位存储在内存的低位,字节高位存储在内存高位。

    例如:0X12345678 

    大端字节序,内存存储格式为:12 34 56 78

    小端字节序,内存存储格式为:78 56 34 12

4、测试当前机器是何种字节序程序

unsigned int x = 0X12345678;
unsigned char *p = (unsigned char *)&x;
printf("%x %x %x %x\n", p[0],p[1],p[2],p[3]);

5、字节序相关的转换函数       

//htonl, htons, ntohl, ntohs - convert values between host and network byte order       

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

 //说明:上述函数中, h代表host, n代表network, s代表short, l代表long

6、地址转换的函数

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

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

in_addr_t inet_addr(const char *cp);

in_addr_t inet_network(const char *cp);

char *inet_ntoa(struct in_addr in);

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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值