- Linux下的网络编程的含义
linux 网络编程是通过socket(套接字)接口实现,socket是一种文件描述符(可类比文件操作),socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种”打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个”文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。 - 常见 socket 分类
(1)流式socket(SOCK_STREAM )
流式套接字提供可靠的、面向连接的通信流;它使用TCP 协议,从而保证了数据传输的正确性和顺序性。
(2)数据报socket(SOCK_DGRAM )
数据报套接字定义了一种无连接的服 ,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP。
(3)原始socket(SOCK_RAW)
原始套接字允许对底层协议如IP或ICMP进行直接访问,功能强大但使用较为不便,主要用于一些协议的开发。 - socket 编程常用函数
(1)int socket(int family, int type, intprotocol); 用以创建一个socket
family指定协议族;type参数指定socket的类型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol通常赋值0, socket()调用返回一个整型socket描述符
(2)int bind(int sockfd, struct sockaddr*my_addr, int addrlen); 用于绑定IP地址和端口号到socket
sockfd是一个socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的针; addrlen常被设置为sizeof(struct sockaddr),bind()函数在成功被调 用时返回0;遇到错误时返回”-1”并将errno置为相应的错误号
(3)int connect(int sockfd, struct sockaddr*serv_addr, int addrlen); 该函数用于绑定之后的client端,与服务器建立连接
sockfd是目的服务器的sockect描述符;serv_addr是服务器端的IP地址和端口号的地址,addrlen常被设置为sizeof(struct sockaddr)。遇到错误时返回-1,并且errno中包含相 应的错误码
(4)int listen(int sockfd, int backlog); 设置能处理的最大连接数,listen()并未开始接受连线,只是设置sockect为listen模式
sockfd是socket系统调用返回的服务器端socket描述符;backlog指定在请求队列中允许的最大请求数
(5)int accept(int sockfd, struct sockaddr*addr, int *addrlen); 用来接受socket连接
sockfd是被监听的服务器socket描述符,addr通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求的客户端地址;addrten通常为一个指向值为 sizeof(struct sockaddr_in)的整型指针变量。错误发生时返回一个-1并且设置相应的errno值
(6)int send(int sockfd, const void *msg, intlen, int flags); 发送数据
sockfd是你想用来传输数据的socket描述符,msg是一个指向要发送数据的指针。 len是以字节为单位的数据的长度。flags一般情况下置为0
(7)int recv(int sockfd,void *buf,intlen,unsigned int flags); 接收数据
sockfd是接受数据的socket描述符;buf 是存放接收数据的缓冲区;len是缓冲的长度。flags也被置为0。recv()返回实际上接收的字节数,或当出现错误时,返回-1并置相应的errno值。
(8)int sendto(int sockfd, const void *msg,intlen,unsigned int flags,const struct sockaddr *to,int tolen); 发送数据,用于面向非连接的socket(SOCK_DGRAM/SOCK_RAW)
该函数比send()函数多了两个参数,to表示目地机的IP地址和端口号信息,而tolen常常被赋值为sizeof (struct sockaddr)。sendto 函数也返回实际发送的数据字节长度或在出现发送错误时返回-1。
(9)int recvfrom(int sockfd,void *buf,intlen,unsigned int flags,struct sockaddr *from,int *fromlen); 接受数据,用于面向非连接的socket(SOCK_DGRAM/SOCK_RAW)
from是一个struct sockaddr类型的变量,该变量保存源机的IP地址及端口号。fromlen常置为sizeof(struct sockaddr)。当recvfrom()返回时,fromlen包含实际存入from中的数据字节数。Recvfrom()函数返回接收到的字节数或当出现错误时返回-1,并置相应的errno - 其他数据结构各函数
(1)in_addr_t inet_addr(const char *strptr); 将字符串IP地址转换为IPv4地址结构in_addr值
(2)char * inet_ntoa(struct in_addr *addrptr); 将IPv4地址结构in_addr值转换为字符串IP
(3)struct hostent *gethostbyname(const char*name); 域名和IP地址的转换
函数返回一种名为hostent的结构类型,它的定义如下:
struct hoste
Linux下的socket编程
最新推荐文章于 2024-09-26 12:31:28 发布
本文详细介绍了Linux下基于socket的网络编程,包括流式、数据报、原始socket的分类,以及socket常用函数的使用,如bind、connect、listen、accept等。同时,讲解了TCP和UDP的客户端和服务端实现过程。
摘要由CSDN通过智能技术生成