linux C语言网络学习总结1

对于网络程序,我们一般分为两类:客户端、服务器端。
服务端程序流程:
1.使用socket设定使用的协议和通信方式(TCP,UDP)
2.使用bind设定提供服务机器的地址,并且与socket关联(确定协议类型和通信方式)
3.使用listen开启端口,并且设定等待队列的大小
4.使用accept等待客户端的连接,并且返回建立连接的套接字
5.使用read在(读数据)和write(写数据)
5.关闭连接

客户端程序的流程:
1.使用socket设定使用的协议和通信方式(TCP,UDP)
2.使用connect连接到服务器,并且与socket关联(确定协议类型和通信方式)
5.使用read在(读数据)和write(写数据)
5.关闭连接  

下面为函数的介绍:
int socket (int domain,int type ,int protocol);
include: sys/types.h、sys/socket.h
result:成功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET。
description: 创建一个网络通信的套接字,确定使用的协议、数据链路的方式。
parameter:
        domain:使用的协议类型,常用的是AF_UNIX和AF_INET
            AF_UNIX:UNIX域协议(文件系统套接字)
            AF_INET:ARPA因特网协议(UNIX网络套接字)
            AF_ISO:ISO标准协议,AF_NS:施乐(Xerox)网络 系统协议
            AF_IPX:Novell IPX协议
            AF_APPLETALK:Appletalk
        type:套接使用的链接方式
            SOCK_STREAM:表示创建一个有序、可靠、面向连接的双向字节流、
            SOCK_DGRAM:
        protocol:使用的的协议。0表示使用默认协议。

int bind (int socket, const struct sockaddr *address, size_t address_len);
include: sys/socket.h
result: 成功返回0,失败返回-1并且设置errno
description: 将网络通信的方式和提供服务的机器的地址关联到一起。
parameter:
        socket: 所使用的socket描述符,主要用于提供使用的协议的信息
        address:通常是通过对sockaddr_un和sockaddr_in两个结构体强制转换得到的。
                struct sockaddr_un{
                    sa_family sun_family; //使用的协议簇。通常赋值为AF_UNIX;
                    char sun_path[];        //表示提供服务或者要连接服务的名字
                };
                struct sockaddr_in{
                    short int;    //使用的协议簇。通常赋值为AF_INET;
                    unsigned short int sin_port; //使用的端口地址
                    struct in_addr sin_addr;// 使用的ip地址 struct in_addr{unsigned long int s_addr;} 可以使用  
                                                            //inet_aton()函数将点分十进制转换成in_adrr的数据类型的;
                };
        address_len:是 sizeof(sockaddr_un)和sizeof(sockaddr_in),表示address的所使用的内存大小。
                主要用来确认不同协议使用的地址大小。AF_UNIX协议使用sizeof(sockaddr_un),AF_INET协议使用sizeof(sockaddr_in)

int listen (int scoket, int backlog)
include:  sys/socket.h
result: 成功返回0,错误返回-1。
description:将端口绑定到程序,被初始化等待队列。并且设定等待队列最大可以容纳等待连接的个数。
parameter:
        socket:需要创建套接字队列的socket
        backlog:最大的等待谅解的个数

int accept (int socket, struct sockaddr *address, size_t *address_len)
include: sys/socket.h
result: 成功返回建立通信的套接字,如果失败就返回 INVALID_SOCKET
description:从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建
                    一个新的套接字来与客户套接字创建连接通道
parameter:
        socket: 正在处于监听状态的套接字,也就是在等待客户端的连接的套接字。
        address: 通常是通过对sockaddr_un和sockaddr_in两个结构体强制转换得到的。用来存放客户端的ip的。
        address_len:是 sizeof(sockaddr_un)和sizeof(sockaddr_in),表示address的所使用的内存大小。
                主要用来确认不同协议使用的地址大小。AF_UNIX协议使用sizeof(sockaddr_un),AF_INET协议使用sizeof(sockaddr_in)

int connect (int socket, const struct sockaddr *address, size_t address_len)
include: sys/socket.h
result:  成功则返回0,失败返回-1,
description: 与服务器建立一个通信套接字。
parameter: 
        socket: 指定与服务器连接使用的协议、数据链路方式。
        address: 服务器的地址。常是通过对sockaddr_un和sockaddr_in两个结构体强制转换得到的。
        address_len:是 sizeof(sockaddr_un)和sizeof(sockaddr_in),表示address的所使用的内存大小。
                主要用来确认不同协议使用的地址大小。AF_UNIX协议使用sizeof(sockaddr_un),AF_INET协议使用sizeof(sockaddr_in)

in_addr_t inet_addr(const char* cp)
include: netinet/in.h
result:  成功返回点分十进制ip对应的unsigned int的值,失败返回-1,
description: 将将点分十进制IPv4地址转化为程序可用的IP地址(unsigned int数据,转换为网络上可以传输的数据存储格式)
parameter:
        cp: 点分十进制的ip地址,如"59.69.165.43"




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值