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.hresult:成功就返回新创建的套接字的描述符,如果失败就返回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.hresult: 成功返回0,失败返回-1并且设置errnodescription: 将网络通信的方式和提供服务的机器的地址关联到一起。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.hresult: 成功返回0,错误返回-1。description:将端口绑定到程序,被初始化等待队列。并且设定等待队列最大可以容纳等待连接的个数。parameter: socket:需要创建套接字队列的socket
backlog:最大的等待谅解的个数
int accept (int socket, struct sockaddr *address, size_t *address_len)include: sys/socket.hresult: 成功返回建立通信的套接字,如果失败就返回 INVALID_SOCKETdescription:从处于监听状态的流套接字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.hresult: 成功则返回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.hresult: 成功返回点分十进制ip对应的unsigned int的值,失败返回-1,description: 将将点分十进制IPv4地址转化为程序可用的IP地址(unsigned int数据,转换为网络上可以传输的数据存储格式)parameter: cp: 点分十进制的ip地址,如"59.69.165.43"