套接字是不是会在 HDD 上保存任何数据?

Posted

技术标签:

【中文标题】套接字是不是会在 HDD 上保存任何数据?【英文标题】:Does sockets save any Data on HDD?套接字是否会在 HDD 上保存任何数据? 【发布时间】:2015-02-28 20:03:27 【问题描述】:

我有一个问题可能看起来很奇怪,但我想到了。

我用 C# 制作了一个小型套接字客户端-服务器聊天应用程序。我想知道套接字是在硬盘上保存任何数据还是只使用 RAM?

如果是,那么 C/C++ 的情况是否也一样?

我的意思是,例如,如果我从客户端向服务器发送一些消息。它是保存在硬盘驱动器上的某个地方还是仅存在于 RAM 中?我的意思是操作系统是否将其存储在某个地方?

对不起,如果我问了一个愚蠢的问题。

谢谢

问候

【问题讨论】:

【参考方案1】:

这不是一个愚蠢的问题,但我们也无法回答。这取决于实现以及您要考虑的堆栈距离。一般来说,我不希望网络堆栈将数据保存到磁盘。但是,操作系统可能会将其写入磁盘作为其虚拟内存管理的一部分(因此,例如,如果这是一个安全问题,那么是的,它最终可能会存储在磁盘上)。

【讨论】:

【参考方案2】:

RAM 连接,然后连接到 RAM。不涉及硬盘。然而,如果物理内存变低,一些包含来自套接字的数据的内存页面可能会被换出到磁盘。除此之外,不涉及硬盘。

【讨论】:

谢谢,这消除了我的疑问,我问是因为我正在尝试编写一个不在硬盘上存储任何内容的聊天应用程序。谢谢【参考方案3】:

除非您在代码中实现序列化(http://en.wikipedia.org/wiki/Serialization),否则它不会保存在硬盘中。如果您不在堆中分配内存,使用 C++ 中的 new 运算符或 malloc 或其系列函数(如果是 C),它不会在您的堆中写入任何内容。在使用堆时,它可能会访问您的硬盘内存,但不是强制性的。如果您阅读以下内容,您可能会在 C/C++ prgram 的情况下对这种内存操作有一个很好的了解 http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html http://en.wikipedia.org/wiki/Virtual_memory

【讨论】:

以上是关于套接字是不是会在 HDD 上保存任何数据?的主要内容,如果未能解决你的问题,请参考以下文章

TCP 套接字上的 send() 是不是可以返回 >=0 和 <length?

Postman 套接字挂断无法连接到 Mongodb

如果一个应用程序打开 2 个 TCP 套接字,是不是会在这两个套接字之间保持有序属性?

Apple 是不是允许使用套接字在两个 iOS 应用程序之间进行通信?

(POSIX)操作系统是不是会在进程崩溃后恢复资源?

在 ICMP 套接字上接收数据