举例说明C语言中SockAddr_In结构的用法

430 阅读6分钟

"sockaddr_in "结构在C语言的套接字编程中是非常常用的。这个结构允许你用所需的地址来绑定一个套接字,以便服务器能够监听客户的连接请求。在本指南中,我们将讨论C语言中 "sockaddr_in "结构的目的和主要组成部分,以及它的用法。

C语言中SockAddr_In结构的目的和组成部分

在本文的介绍中,我们已经简要地说明了C语言中 "sockaddr_in "结构的目的。现在,我们将尝试通过讨论它的各个组成部分来获取更多信息。下面将讨论C语言中 "sockaddr_in "结构的三个主要组成部分,我们也将在我们的例子中使用它们。

  • sin_family。 这个组件指的是一个地址族,在大多数情况下,它被设置为 "AF_INET"。
  • sin_addr: 它代表一个32位的IP地址。
  • sin_port。 它指的是一个16位的端口号,服务器将在这个端口上听取客户的连接请求。

一旦你填充了 "sockaddr_in "结构的所有组件,你就可以轻松地使用创建的套接字与所需的客户端进行交互。

在C语言中演示SockAddr_In结构的使用的程序

为了向你演示 "sockaddr_in "结构在C语言中的使用,我们写了一个简单的程序,用于客户端和服务器的基本交互。下面将分别讨论服务器和客户端的代码。

服务器端代码

对于这个例子的服务器端代码,我们首先包含了所有需要的库或头文件,所有这些文件都显示在下面的图片中。

然后,我们编写的代码显示在下面的图片中。

在包含了这些库之后,我们有了 "main() "函数,其中我们声明了三个整数变量,名为 "server_fd"、new_socket和 "valread"。我们将在以后的代码中利用这三个变量。然后,我们创建了一个名为 "address "的 "sockaddr_in "结构的对象。然后,我们创建了另一个整数变量 "opt",并为其赋值 "1"。之后,我们创建了一个名为 "addrlen "的整数变量,并为其分配了 "address "对象的大小。我们创建了一个字符类型的缓冲区,用于保存客户端发送的信息。然后,我们创建了一个名为 "hello "的字符型指针,并为其分配了一个样本信息。

我们也有一个 "if "语句来处理套接字创建失败的错误。我们还有一个 "if "语句用于处理与套接字相关的所有其他类型的错误。然后,通过使用 "地址 "对象,我们为 "sockaddr_in "结构的各个部分,即sin_family、sin_addr.s_addr和sin_port,添加了合适的值。之后,我们通过使用另一个 "if "语句将新创建的套接字绑定到所提供的地址上。然后,我们使用另一个 "if "语句来检查服务器在监听时是否出现错误。

之后,我们有一个 "if "块,用于使服务器接受来自任何一个客户的连接请求,并发送和接收信息。然后,我们使用 "valread "变量来读取 "buffer "变量中客户端发送的消息。然后,我们简单地将 "缓冲区 "变量的值打印在终端上。我们使用 "send "命令来发送我们先前分配给 "hello "字符串的消息给客户端。最后,我们想在服务器端打印一条确认信息。

客户端代码

对于客户端的程序,我们实现了以下图片中的代码。

我们首先包含了所有需要的库和头文件,然后是我们的 "main() "函数,其中我们创建了两个整数变量,名为 "sock "和 "valread"。然后,我们创建了一个名为 "sockaddr_in "结构的对象 "serv_addr"。之后,我们创建了一个 "hello "字符指针,并将我们想发送给服务器的信息分配给它。然后,我们有一个字符类型的缓冲区来保存服务器收到的消息。我们也有一个 "if "语句来检查是否有一个套接字创建错误。

通过使用 "serv_addr "对象,我们以与服务器端代码相同的方式填充了 "sockaddr_in "结构的组件。之后,我们使用了一个 "if "语句来检查提供的IP地址是否有效。然后,我们有另一个 "if "语句来连接客户端和服务器。我们使用 "send "命令将 "hello "字符串中的信息发送到服务器。我们在客户端的终端上打印了一条确认信息。最后,我们在客户端读取并打印了服务器发送的信息。

编译和执行C代码

为了编译我们的C语言脚本,我们首先在Linux Mint 20上启动了两个不同的终端窗口(一个用于客户端,一个用于服务器),并在每个终端上使用了下面的命令。

$ gcc sockaddrinServer.c –o sockaddrinServer

$ gcc sockaddrinClient.c –o sockaddrinClient

在成功地编译了我们的两个C脚本之后,我们必须先执行服务器端,运行下面的命令,使它进入监听模式,任何客户端都可以很容易地与它连接。

$ ./sockaddrinServer

之后,我们需要通过运行下面的命令来执行客户端的代码。

$ ./sockaddrinClient

当你在终端上输入上述命令后按下回车键,你将在客户端收到以下信息。

此外,如果你现在看一下服务器端的终端,那么你将能够看到下面图片中显示的信息。

这就是你如何在C语言编程中使用 "sockaddr_in "结构来创建一个客户端和服务器之间通信的基本程序。

总结

在这篇文章中,我们旨在向你介绍C语言的 "sockaddr_in "结构。我们首先简要地讨论了这个结构的目的,然后描述了它的主要组成部分。之后,我们用C语言向你演示了一个完整的例子,这个例子是为使用 "sockadd_in "结构的客户端和服务器之间的交互而设计的。我们不仅分享了这些C语言脚本的代码,而且还教给你执行这些脚本的正确顺序,即应先执行服务器端代码,然后再执行客户端代码。这样做的目的是为了使客户端在执行后能很容易地连接到服务器。通过本文所演示的例子,你可以很容易地了解到C语言编程中 "sockaddr_in "结构的目的和用法。