linux网络编程

发布于:2025-03-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

今天呢,我们来讲讲网络编程,但是这一篇呢,只是应用编程这边的,并没有涉及驱动,只是简单的来聊一聊

网络:

网络是指将多个计算机或设备通过通信链路连接起来,以实现信息传输和资源共享的系统。网络可以是局域网(LAN),用于连接同一地理位置范围内的设备,也可以是广域网(WAN),用于连接不同地理位置范围内的设备。通过网络,用户可以通过电子邮件、网页浏览、文件传输等方式进行信息交流和资源共享。网络的基础是互联网,它是全球范围内的计算机网络,由各种硬件设备、协议和技术组成。互联网使得人们可以在全球范围内进行通信和访问各种信息资源。网络的发展和应用对现代社会的各个领域都有着重要的影响,包括通信、商务、教育、娱乐等。

因为毕竟是应用编程来着嘛,我们还是比较注重的是他怎么去使用,接下来来看看网络中的一些API函数

socket()函数 用来创建套字节

Linux系统下的C语言socket函数原型

domain :指定套接字的地址族,常见的有 AF_INET (IPv4)和 AF_INET6 (IPv6)。
type :指定套接字的类型,常见的有 SOCK_STREAM (面向连接的流套接字)和 SOCK_DGRAM (无连接的数据报套接字)。
protocol :指定套接字使用的协议,通常为0,表示使用默认协议。

我们来看看domain里面的一些成员:

接着来看看type的

SOCK_PACKET已经被废弃了。在Linux 2.2版本以前,SOCK_PACKET是一种特殊的socket类型,可以用于访问网络驱动程序,但是需要特权权限。在Linux 2.2版本之后,SOCK_PACKET被替换为了SOCK_RAW,SOCK_RAW可以提供相同的功能,而且不需要特权权限。
在Linux 2.4版本之后,SOCK_PACKET被重新引入了,但这次它只是作为一种socket族别(socket family),而不是一种socket类型。也就是说,现在我们可以使用PF_PACKET来创建一个SOCK_PACKET socket了,而不再使用SOCK_PACKET socket类型。
请注意,PF_PACKET是一种特殊的socket族别,用于在数据链路层上发送和接收数据。它可以与SOCK_RAW结合使用,来构造和解析以太网帧、ARP报文等,从而实现更灵活的网络编程。

接着来看看最后一个参数protocol

当调用socket函数时,如果protocol参数设置为0,则会选择默认的协议。默认的协议通常是与给定的域和套接字类型最匹配的协议。
但是,有些域和套接字类型支持多种协议。在这种情况下,可以使用protocol参数来选择特定的协议。例如,在IPv4中,SOCK_STREAM套接字类型支持TCP和SCTP协议,SOCK_DGRAM套接字类型支持UDP和DCCP协议。如果我们要使用SCTP协议而不是TCP协议来创建一个SOCK_STREAM套接字,则可以将protocol参数设置为IPPROTO_SCTP。
需要注意的是,不同的操作系统可能支持不同的协议,因此要根据具体的环境来选择正确的协议。此外,还需要了解不同协议之间的性能和特性差异,以确保选择的协议适合应用程序的需求。
当调用socket函数时,protocol参数可以根据不同的domain和type组合来选择适合的协议。以下是一些常见的domain和type组合以及对应的protocol:

最后来看看他的返回值:

在Linux系统下,C语言的套接字函数(如socket()、bind()、listen()等)的返回值类型通常是int型。这些函数的返回值表示函数执行的结果或错误代码。如果函数执行成功,则返回一个非负的套接字描述符,用于后续的套接字操作。如果函数执行失败,则返回-1,并且可以通过检查全局变量errno来获取具体的错误代码。
常见的套接字函数返回值为-1的错误代码包括:

EACCES:权限不足,无法创建套接字。
EAFNOSUPPORT:不支持指定的地址族。
EINVAL:无效的参数。
EMFILE:达到了进程打开的文件描述符数量的上限。
ENFILE:达到了系统打开的文件描述符数量的上限。
ENOBUFS/ENOMEM:内存不足,无法分配资源。
需要根据套接字函数的返回值和具体的错误代码来判断函数是否执行成功,并根据错误情况采取适当的处理措施。

setsockopt()函数 来设置socket的属性

Linux系统下的C语言setsockopt函数原型

setsockopt()函数是一个用于设置套接字选项的系统调用函数。它允许应用程序在已打开的套接字上设置各种选项,以控制套接字的行为。
参数说明:

sockfd:指定要设置选项的套接字描述符。
level:指定选项所在的协议层。常用的协议层包括SOL_SOCKET(通用套接字选项)、IPPROTO_TCP(TCP协议选项)和IPPROTO_IP(IP协议选项)等。
optname:指定要设置的选项名称。
optval:指向存储选项值的缓冲区。
optlen:指定选项值的大小。
下面是一些常见的套接字选项和它们的使用示例:

接着来看第三个API函数

bind()函数 用于绑定端口

接着来看下一个API函数:

listen()函数 用于监听连接

accept()函数 接受连接并处理请求