局域网内多台电脑读写一个文件的问题

gxx2019 2009-10-12 07:45:14
现有一个局域网,有主机A,从机BCDE...A在局域网内映射了一个网络磁盘Z,从机可以直接访问磁盘内容。现在我想做一个网络计算系统。大体思路如下:
Z盘有一些很大的图片文件,一幅几个G。假设有一幅图片为test,处理后的图片为outputtest.大小为4G.服务器端程序启动,首先选择了test图片作为处理对象,将test分成100块,每块40M.每当有一个客户端请求时,就用socket向客户端发送数据包,包的内容大概包括:文件的路径及名称,(例如Z:\\test),要处理的块(例如这是第一个客户端的第一次请求,就给它0,代表图像的第一块)。因为我是想让多台电脑处理同一副图像,那么假设有N台电脑请求,一次就可以处理N块。当一块处理完成后,与服务器通信,告诉服务器已经完成,服务器就会继续发送下一个块的标记给从机,从机根据标记从Z盘读取数据进行处理,并写到outputtest中去。如此直到100个块处理完成,继续下一幅图像。。。。
请问各位:
1.这设计思路可不可行?要不要用到较深的内存管理方法,如内存映射文件等
2.多台电脑如何同时写文件,如例子中的outputtest。如果不能同时写文件,当有一个从机在写数据时,如何让其他从机知道,并让它们等待,直到在写的从机写完了,其他从机再依次写。
3.如果你有什么好的方法,不妨告诉我哈。
我刚毕业,对线程,进程,网络还不是很懂,谢谢各位了
...全文
179 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Wenxy1 2009-10-13
  • 打赏
  • 举报
回复
1.这设计思路可不可行?要不要用到较深的内存管理方法,如内存映射文件等
设计思路可行,要是服务器的内存较大,可用用内存映射文件。

2.多台电脑如何同时写文件,如例子中的outputtest。如果不能同时写文件,当有一个从机在写数据时,如何让其他从机知道,并让它们等待,直到在写的从机写完了,其他从机再依次写。
对写文件操作要做成临界区。读文件操作,依据情况而定。

3.如果你有什么好的方法,不妨告诉我哈。
读文件和写文件分别用一个线程来做。分块读和分块写的消息分别放在一个buffer中,读写线程对buffer中的消息进行处理。
gxx2019 2009-10-13
  • 打赏
  • 举报
回复
这里的服务器只是普通的一台电脑,其性能跟从机相当。服务器不需要把文件内容发送给从机。服务器映射了一个硬盘,从机直接访问该硬盘,就像自己的硬盘一样。所以读处理写都是从机完成的。
Gothic_girl 2009-10-12
  • 打赏
  • 举报
回复
和写数据库类似
A1erX 2009-10-12
  • 打赏
  • 举报
回复
2楼正解,楼主构建思考得太复杂了。
dijkstar 2009-10-12
  • 打赏
  • 举报
回复
1. 服务器方读出test或写入outtest时,应该使用内存映射文件,因为文件太大;
2. 服务器工作1:每收到一个客户N的请求获取数据,就将test[N]数据块send给客户N;
3. 服务器工作2:每收到一个客户N的处理好数据回送,就将数据写入outtest[n],但写入时应采用互斥保护:参考msdn的CRITICAL_SECTION或CcriticalSection类的加锁、解锁。
4. 服务器一定使用了多线程的,可能会用到WaitForSingleObject和Event来同步。
pady_pady 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dirdirdir3 的回复:]
既然有服务器,文件方面的问题当然是服务器端处理的,客户端只需要从服务器这里得到数据,处理,传回就可以了,可以在服务器段作两个完成端口,一个是对文件处理的,一个是socket连接的...........................
[/Quote]
顶,
dirdirdir3 2009-10-12
  • 打赏
  • 举报
回复
既然有服务器,文件方面的问题当然是服务器端处理的,客户端只需要从服务器这里得到数据,处理,传回就可以了,可以在服务器段作两个完成端口,一个是对文件处理的,一个是socket连接的...........................

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧