Skip to content

Latest commit

 

History

History
63 lines (39 loc) · 1.82 KB

14-套接字和标准IO.md

File metadata and controls

63 lines (39 loc) · 1.82 KB

套接字和标准I/O

1. 标准I/O函数的优点

1. 标准I/O函数的两个优点

  • 标准I/O函数具有良好的移植性;
  • 标准I/O函数可以利用缓冲提高性能;

image-20210904170359814

  • 使用标准I/O函数传输数据时,经过两个缓冲;
  • TCP的缓冲:用来实现TCP协议;因为丢失数据时要重传,重传的数据就保存在缓冲区;
  • I/O函数的缓冲:提高性能;

2. 标准I/O函数和系统函数间的性能对比

见Code/syscpy.cpp, Code/stdcpy.cpp;

3. 标准I/O函数的几个缺点

  • 不容易进行双向通信;
  • 有时可能频繁调用fflush函数;
  • 需要以FILE结构体指针的形式返回文件描述符;

因为切换读写工作状态时应调用fflush函数,这会影响基于缓冲的性能提高;

2. 使用标准I/O函数

创建套接字时返回的是文件描述符,而为了使用标准I/O函数,只能将其转换为FILE结构体指针;

1. 利用fdopen函数转换为FILE结构体指针

#include <stdio.h>
FILE * fdopen(int filedes, const char *mode);
  • filedes:需要转换的文件描述符;
  • mode:将要创建的FILE结构体指针的模式信息;
  • 成功时返回FILE结构体指针,失败则为NULL;

使用实例见Code/desto.cpp;

2. 利用fileno函数转换为文件描述符

#include <stdio.h>
int fileno(FILE *stream);
  • 成功返回转换后的文件描述符,失败返回-1;

3. 基于套接字的标准I/O函数使用

对回升服务器端和客户端的套接字操作改为基于标为I/O函数的数据交换形式;

修改的对象为:

  • 回声服务器端:echo_server.cpp;
  • 客户端:echo_client.cpp;

实例见Code/echo_stdserv.cpp, Code/echo_stdclnt.cpp;