C 使用多线程的套接字服务器或文件服务器实现:概念不明确

C 使用多线程的套接字服务器或文件服务器实现:概念不明确,c,linux,multithreading,pthreads,C,Linux,Multithreading,Pthreads,请帮我弄清楚这个概念。假设我们有一个使用线程实现的套接字端口服务器。套接字服务器监听套接字端口,当消息到达时,创建一个线程来服务请求 客户端代码向服务器发送给定数量的消息。这个客户端代码也可以由多个用户从不同的机器上运行。我知道客户端代码作为独立进程运行。Ihat是独立进程向服务器发出请求,然后由服务器线程处理 那么,客户端进程堆栈、用户地址空间、进程控制块等是否传递给处理其请求的服务器线程 类似地,如果它是一个文件服务器,并且一个文件打开请求由一个服务器线程执行,那么fd是服务器文件描述符表或

请帮我弄清楚这个概念。假设我们有一个使用线程实现的套接字端口服务器。套接字服务器监听套接字端口,当消息到达时,创建一个线程来服务请求

客户端代码向服务器发送给定数量的消息。这个客户端代码也可以由多个用户从不同的机器上运行。我知道客户端代码作为独立进程运行。Ihat是独立进程向服务器发出请求,然后由服务器线程处理

那么,客户端进程堆栈、用户地址空间、进程控制块等是否传递给处理其请求的服务器线程

类似地,如果它是一个文件服务器,并且一个文件打开请求由一个服务器线程执行,那么fd是服务器文件描述符表或调用进程的一部分

如果能找到我能读到的资料的链接,我会很高兴的。
谢谢

不,客户端和服务器是不同的进程,甚至可能在不同的机器上运行

客户端将要求操作系统(通过库)向服务器发送网络消息,服务器的操作系统将解包这些消息并将它们(通过库)引导到服务器进程中

现在,“客户端处理线程”是另一回事了,它们是服务器进程的子组件,在您的设置中,其中一个线程(在网络另一端处理客户端的线程)将接收数据并执行所需的任何操作(如有必要,可能包括回复)


在文件服务器的情况下,操作系统提供的文件描述符永远不会“离开”文件服务器。文件服务器客户端创建镜像远程计算机内容所需的任何内容。这种镜像可能包括文件描述符,但它们绝对不是驻留在服务器上的文件描述符。客户端文件描述符绑定到代码,该代码接受请求的操作并将其转换为网络调用,而服务器文件描述符(可能)直接访问磁盘上的块。

“套接字服务器侦听套接字端口,当消息到达时,创建线程来服务请求。”。在这种类型的服务器设计中,当服务器侦听线程接受来自客户端的连接时,将创建一个新的客户端-服务器线程(或depooled)。此客户机服务器线程被传递给侦听器线程accept()调用分配的客户机服务器套接字实例。然后,客户机-服务器线程通常从客户机-服务器套接字读取以获取消息、HTTP get/POST等等

'客户端代码向服务器发送给定数量的消息。这个客户端代码也可以由多个用户从不同的机器上运行。我知道客户端代码是作为独立进程运行的。Ihat是指独立进程向服务器发出请求,然后由服务器线程处理。是的。一个盒子上的一个客户端可能有来自多个线程的多个连接,但您的回答是99.99%正确

那么,客户端进程堆栈、用户地址空间、进程控制块等是否会传递给处理其请求的服务器线程!那绝对是一场噩梦

类似地,如果它是一个文件服务器,并且一个文件打开请求由一个服务器线程执行,那么fd是服务器文件描述符表或调用进程的一部分

客户端-服务器线程打开的文件/任何内容。客户端-服务器线程分配的所有资源/句柄都属于服务器

Rgds,
马丁

请务必让我知道我为什么会有负面看法……不知道没关系不是犯罪。积分主要是为了保持有趣而玩的游戏。这和问题的质量只有轻微的关系,有时人们玩得很糟糕。你需要学习的是网络,有很多相关的书籍。我更喜欢Tanenbaum的,但是技术性很强。然而,如果你真的设法度过了难关,你将在一个非常低的层次上对网络有很强的理解。在那之后,你只需要学习如何为它编程(这是完全不同的事情)。问题是,当你专注于网络时,你的很多问题实际上是理解操作系统是如何工作的。Abraham Silberschatz的《操作系统概念》是一本关于操作系统演变的好书。当然,要理解这本书,掌握一门编程语言是很有帮助的,最好是C。@Edwin谢谢。非常感谢你的指点,不客气,祝你好运!