socket接口之初识

socket接口

伯里克利(berkeley)扩展了socket接口,使其支持了UNIX下的TCP/IP协议,socket接口是一个编程接口,是一个特殊的文件描述符(everything in Unix is a file)

socket类型

流式套接字(SOCK_STREAM):对应TCP。
数据报套接字(SOCK_DGQAM):对应UDP。
原始套接字(SOCK_RAM):可以对IP、ICMP直接访问。

端口

在利用socket接口时,在传输层需要端口号,端口号是用来区分不同的进程的,IP地址是用来区分哪个主机的,通过端口号和IP地址就可以找到指定的主机的哪一个进程。
端口号用两个字节来表示
在这里插入图片描述
选用的端口号可以是1024-49151

字节序

小端序:低序字节存储在低地址
大端序:高序字节存储在低地址
网络中的传输数据必须使用网络字节序,即大端字节序。

字节序的转换

输入端口号时要用到。

主机字节序(小端)–>网络字节序(大端):

//host->network
u_long htonl (u_long hostlong)
//用端口字节序的转换(端口号为2个字节)
u_short htons (u_short hostshort)//常用

网络字节序(大端)–>主机字节序(小端):

//network-->host
u_long ntohl (u_long hostlong)
//用端口字节序的转换(端口号为2个字节)
u_short ntohs (u_short hostshort)

IP地址的转换

字符串到数字的转换,即198.168.55.4(人看的字符)–>数字(计算机的数字)

typedef uint32_t in_add_t;

struct in_addr
{
	in_addr_t = s_addr;
}
//字符-->数字
in_addr_t inlet_addr(const char *cp);
//数字-->字符
char *inet_ntoa(struct in_addr in);
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main(int agrc, char const *argv[])
{
	//定义in_addr_t类型的ip_num
    in_addr_t ip_num;
    //将字符转换为数字
    ip_num = inet_addr("192.168.15.25");
    printf("addr = 0x%x\n", ip_num);


    //定义in_addr类型的结构体in
    struct in_addr in;
    //将in中的结构体成员s_addr赋值
    in.s_addr = ip_num;
    printf("convert ip:%s\n", inet_ntoa(in));
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值