高级套接字编程:带外数据与getaddrinfo函数
需积分: 49 89 浏览量
更新于2024-08-14
收藏 1.29MB PPT 举报
"VC++高级套接字编程教程——最后一个发送方示例及高级套接字编程概念"
在本文档中,我们关注的是VC++环境下的高级套接字编程,特别是如何利用套接字进行数据传输,包括普通数据和带外数据(Out-of-Band, OOB)的发送。首先,我们来看提供的示例代码,它演示了一个简单的TCP发送方程序。
```cpp
int main(int argc, char **argv) {
int sockfd;
if (argc != 3)
err_quit("usage: tcpsend04 <host> <port#>");
sockfd = Tcp_connect(argv[1], argv[2]);
Write(sockfd, "123", 3);
printf("wrote 3 bytes of normal data\n");
Send(sockfd, "4", 1, MSG_OOB);
printf("wrote 1 byte of OOB data\n");
Write(sockfd, "56", 2);
printf("wrote 1 byte of normal data\n");
Send(sockfd, "7", 1, MSG_OOB);
printf("wrote 1 byte of OOB data\n");
Write(sockfd, "89", 2);
printf("wrote 2 byte of normal data\n");
exit(0);
}
```
这段代码首先检查命令行参数,然后通过`Tcp_connect`函数建立到指定主机和端口的连接。接着,它使用`Write`函数发送正常数据,而使用`Send`函数发送带外数据,并通过`MSG_OOB`标志来指示数据是带外的。带外数据通常用于紧急情况,因为它们可以不遵循正常的队列顺序,而是立即被处理。
接下来,我们转向高级套接字编程的一些关键点:
1. **高级名字与地址函数**:传统上,我们使用`gethostbyname`和`gethostbyaddr`来解析主机名或地址,但这些函数已过时,且不适用于多协议环境。取而代之的是`getaddrinfo`函数,它可以同时处理IPv4和IPv6,且是线程安全的。`getaddrinfo`接受主机名、服务名和一个`hints`结构,返回一个`addrinfo`链表,其中包含了所需的地址信息。
2. **addrinfo结构**:`addrinfo`结构体包含了关于网络地址的各种信息,如标志、地址族、套接字类型、协议、地址长度、规范名以及实际的地址等。这个结构体允许程序员灵活地处理各种类型的网络连接。
3. **高级i/o函数**:虽然`Write`和`Send`在这里被用作基本的发送函数,但高级套接字编程可能涉及更多复杂的I/O操作,如异步I/O、缓冲区管理和错误处理。
4. **高级UDP套接字编程**:在TCP套接字之外,UDP套接字提供了无连接的服务,其编程通常涉及到更多的错误处理和包序列化,因为UDP不保证数据的顺序或可靠性。
5. **带外数据**:如上述代码所示,通过设置`MSG_OOB`标志,可以发送带外数据。这在需要紧急通信或者数据优先级较高的场景下非常有用。
总结来说,这个教程深入讲解了VC++环境中高级套接字编程的关键概念,包括高效的名字解析、灵活的I/O操作、UDP套接字的使用以及带外数据的发送。通过学习这些内容,开发者能够构建更复杂、更健壮的网络应用程序。
2014-11-30 上传
2023-09-07 上传
点击了解资源详情
点击了解资源详情
2018-12-18 上传
2022-06-23 上传
2020-09-18 上传
点击了解资源详情
点击了解资源详情
郑云山
- 粉丝: 20
- 资源: 2万+
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析