2011-06-05 75 views
0

我对套接字编程极其新颖,我正在实现一个接收来自客户端的open(),read(),write(),close()等请求的文件服务器。文件服务器将处理请求并向客户端发送每个系统调用的返回值。文件服务器及其关联的客户端

我不知道我需要定义什么类型的套接字(即流套接字,数据报套接字等)。以及什么命令将从客户端发送请求,我将如何从服务器接收返回值,如何在服务器端接收它并将返回值发送给我的客户端。

将gratefull得到一些指针。

感谢

一个编辑:是开始Server not able to properly read/open a filename sent by client in C

回答

1

它部分取决于您的文件服务器设计。

如果你打算使用stateless服务器,那么数据报或数据流就可以。数据报是比较好的,因为您的服务器和客户端不需要处理部分请求 - 请求的全部内容都包含在数据报中。

如果你打算为stateful服务器,然后流可能是更好的 - 你可以自动释放锁,由客户端,当您收到TCP RST包去分配资源“拥有”。 (客户端走了,丢掉了他们的状态。)你当然可以用数据报服务构建一个有状态的服务器,但它看起来不太合适。

但开放的互联网上,通常你只有UDPTCP - 我不知道,如果RDP,可靠的数据报传输,路由上给出的ISP或没有。并被迫在不可靠数据包和可靠流,我几乎每次都会推荐可靠的流。你只能在可靠的局域网上使用你的协议吗?或有损无线或公共互联网链接?

0

我会用一个流套接字简单的东西像这样的工作,但其他人做不同的,例如网络文件系统(NFS)。

要在客户端和服务器之间进行通信,您需要一个协议。 OpenSSH为其scpsftp程序使用的程序很适合实施。看看它。 http://openssh.org/txt/draft-ietf-secsh-filexfer-02.txt

+1

请注意,最近版本的[NFS已转移到TCP](http://en.wikipedia.org/wiki/Network_File_System_(protocol))。 – sarnold 2011-06-05 06:22:00

+0

和@sarnold是否有可能获得粗略的示例代码,以便我更清楚。感谢您的问题 – 2011-06-05 06:31:25

+0

我没有任何示例代码,但是 - 再次 - 查看OpenSSH中的'scp'和'sftp'程序。 – 2011-06-05 06:35:15