实验十一的主题是网络编程,主要目的是让学生了解和掌握网络编程的基本特点和功能,并通过实践学习如何使用C语言调用网络系统函数来实现网络访问。实验中涵盖了三个方面的主要内容:
1. **地址处理与域名解析**:
实验要求学生利用地址处理函数来访问网络地址,并实现域名与IP信息的解析。在实际的网络编程中,这通常涉及到`gethostbyname()`或`gethostbyaddr()`函数,它们用于获取主机名或地址信息。同时,`inet_ntoa()`函数用于将IPv4地址从网络字节顺序转换为人类可读的字符串形式。
2. **UDP广播与组播通信**:
UDP(用户数据报协议)是一种无连接的、不可靠的传输协议,适用于实时数据传输。实验要求实现UDP的广播和组播通信。广播是指向网络上的所有设备发送数据,而组播则是向特定的一组设备发送。在C语言中,这通常通过`sendto()`和`recvfrom()`函数实现,配合`setsockopt()`设置广播或多播选项。
3. **原始套接字应用**:
原始套接口(raw sockets)允许程序员直接操作网络层的数据包,提供了更多的灵活性。实验中提到的原始套接字基本应用可能包括创建和发送自定义的IP数据包,这通常涉及`socket()`函数创建原始套接字,然后使用`sendto()`或`recvfrom()`进行数据交互。
实验的具体实施是在Linux环境下进行,每个学生单独一组,使用C语言编写程序。给出的代码示例是一个简单的TCP服务器,它监听特定的端口(在这里是3333),等待客户端连接。当有新的连接请求时,服务器会调用`accept()`函数接受连接,并与客户端进行通信。服务器首先创建一个套接字`sockfd`,然后绑定到本地地址`INADDR_ANY`(表示接受任何IP地址的连接)和指定的端口。`listen()`函数设置服务器监听状态,允许最大5个连接请求排队。一旦有连接到达,服务器将使用`inet_ntoa()`函数打印出客户端的IP地址。
这个实验旨在让学习者熟悉网络编程的基本流程,包括套接字的创建、绑定、监听、接受连接以及数据的收发。通过这样的实践,学生能够更好地理解网络通信的原理,为后续的网络编程项目打下坚实的基础。