UNIX网络编程初入

UNIX网络编程初入


!!!先前提醒!!!

本专栏内容为自学笔记,如有差错多谢批评指正。所有内容参考《UNIX网络编程》一书,结合书本和笔记学习最佳!!!

一、main函数传参

int mian(int argc, char **argv)
  • argc表示传入argv的字符串个数
  • argv[0]表示程序 运行的全路径
  • argv[1]表示传入的第一个字符串
  • 依次类似

二、#define和const

  • #define定义的是常数,在编译的时候决定
  • const声明的是常量,只有程序运行的时候才定值(相对于变量而言)

三、unp.h头文件内置函数解读

  1. err_sys(char[] mag)

    当发生错误时,传入char[]字符串提示错误信息,并结束程序

  2. bzero(char *add, int size)

    使add地址的size大小空间清零

  3. #define struct sockaddr SA

    sockaddr为通用套接字地址结构

    ==注意:==每当一个套接字函数需要指向某个套接字地址结构的指针时,这个指针必须强制转换为通用套接字地址结构指针。这是因为套接字函数早于ANSI C标准。(感兴趣自行百度)

四、相关函数解读

4.1端口IP 的格式转换

网际套接字结构体 中必须使用特定的格式。使用相应提供的函数转换

  1. htons(int 端口号)

    主机到网络短整型,转换为二进制端口号

    servaddr.sin_port   = htons(13);
    
  2. inet_pton(int 协议类型, char *点分十进制地址, char *赋值的结构体中的地址)

    呈现形式到数值,例如127.0.0.1转为合适的格式

    inet_pton()和inet_ntop()函数详解

    if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)         err_quit("inet_pton error for %s", argv[1]);
    

4.2创建套接字

socket创建一个网际字节流套接字,该函数返回一个小整数 描述符,以后所有函数调用该描述符来 标识这个套接字。(也就是句柄)

  1. socket(AF_INET, SOCK_STREAM, 0)

    if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)                 err_sys("socket error");
    

4.3建立与服务器链接

  1. int connect (int sockfd, struct sockaddr * serv_addr, int addrlen);
    • 句柄
    • 要连接的服务区地址,通用套接字指针
    • 连接服务器套接字的大小(sizeof)

4.4读取数据

  1. ssize_t read(int fd, void *buf, size_t count);

    返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0

    • 句柄
    • 缓冲区
    • 缓冲区大小
    while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
                     recvline[n] = 0;        /* null terminate */
                    if (fputs(recvline, stdout) == EOF)
                            err_sys("fputs error");
            }
            if (n < 0)
                    err_sys("read error");
    

4.5绑定套接字

  1. int bind(int sockfd, const struct sockaddr *address, socklen_t address_len);
    • 套接字句柄
    • 绑定的地址结构
    • 地址结构的大小(sizeof)

4.6监听套接字

  1. Listen(listenfd, LISTENQ);

    • 套接字句柄
    • unp.h定义的排队的最大客户连接数

    listenfd转化为监听套接字

4.7接收套接字

  1. int accept(int sockfd, void *addr, int *addrlen);

五、主机字节序、网络字节序

主机字节序指,在本主机的字节存储数据中,不同主机有大端小端之分,为了保持数据传输与接受的一致性,在网际传输中使用网络字节序,当数据达到客户端或服务端时再反解。

  • inet_ntop()、inet_pton() : 点分十进制字符串(dotted-decimal notation)与网络字节序(network byte order)二进制数值互转
  • htons()、ntohs(): 网络字节序(network byte order)与主机字节序(host byte order)互转
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值