问一个局域网简单的问题

gxx2019 2009-08-28 02:49:43
现在有一个小的局域网,10台电脑左右。局域网上有一个磁盘柜(意思是对于局域网上的每台电脑,相当于是自己的硬盘一样)。我想做一个小型系统。思路如下:
首先是服务器端(就是一台普通电脑),启动服务器,侦听客户端的响应,如果客户端不忙,就发送包给服务器不忙,等局域网上的所有机子都发送消息后,可以判断哪些机子有空,哪些没有?服务器就给有空的机子发送命令包,请问这个时候侦听结束了,我要不要把侦听的那个线程关掉?命令包包括服务器名,ip,客户端名,ip, 文件在磁盘柜中路径,文件名等。当客户端接收到命令后,就开始处理文件。(文件较大)。此时服务器要每隔一段时间向客户端发送心跳包,判段客户端的状态。
如果客户端出错了就命令从新处理。当处理完成后退出。
请问:1.我是基于UDP,还是TCP?
2.用阻塞模式还是非阻塞模式?
3.服务器侦听,发心跳,命令从机退出等,我是在一个线程里完成,还是开不同的线程呢
4.怎么样让程序每隔一段固定的时间发送心跳包啊?那些包是不是定义一个结构体,用什么函数发这些包呢?
谢谢大家了,不懂网络程序。尽量具体点啊
...全文
177 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
jf


Wenxy1 2009-08-30
  • 打赏
  • 举报
回复

请问:1.我是基于UDP,还是TCP? TCP。

2.用阻塞模式还是非阻塞模式? 非阻塞,建议用select模型。
3.服务器侦听,发心跳,命令从机退出等,我是在一个线程里完成,还是开不同的线程呢 同一个线程。
4.怎么样让程序每隔一段固定的时间发送心跳包啊?那些包是不是定义一个结构体,用什么函数发这些包呢?send()函数,建议看《Windows网络编程》,《TCP/IP详解》。


love_lm 2009-08-29
  • 打赏
  • 举报
回复
学习下
fangle6688 2009-08-29
  • 打赏
  • 举报
回复
1、服务器如何主动去轮询客户端忙不忙?
难道每个客户端都要开个端口Listen?

2、服务端给客户端发命令?
什么叫服务端?服务端是提供服务的,是被动的,通常发命令(或称指令、请求)的都是客户端

3、你的作业任务是否与客户端相关?
一个要处理的文件,随便由哪个客户端处理都无所谓,还是不同的文件需要不同的客户端来处理?
如果任务与客户端无关,你根本不需要考虑客户端忙不忙的问题,谁发请求就给谁处理

4、为什么要UDP、阻塞?
你才10个客户端而已,网络数据交换压力很低,用UDP意义何在?
文件处理通常都是很耗时的操作,你向客户端send了工作任务之后,能用recv阻塞接收工作结果吗?
你怎么知道客户端要多久才能回复结果?阻塞recv也会超时的啊,明显服务端应该用异步非阻塞模式

5、为什么要心跳机制?
服务器不需要发送心跳包,因为客户端是主动方,掉线了重连就是了
客户端需要发送心跳包,因为服务器是被动的,客户端无操作的话,服务端只能傻等


ccpaishi 2009-08-28
  • 打赏
  • 举报
回复
在局域网内的话处理UDP的异步的服务器模式最好。心跳和发送以及接受命令可以都在一个线程里。数据另外开线程。心跳包是相互能够互相识别的一个包,一般定义就是心跳标志加上时间,进行判断双方是否保活。这个可以根据楼主的系统能够灵活设计。回答完毕。
zhaohongbo83 2009-08-28
  • 打赏
  • 举报
回复
学习了!由于要回mark了,回去再看!
飞天赤狐 2009-08-28
  • 打赏
  • 举报
回复
TCP,用异步SOCKET,通过定义Timer来发起处理
mazm_yanzhu 2009-08-28
  • 打赏
  • 举报
回复
UP
百事烟 2009-08-28
  • 打赏
  • 举报
回复
1.我是基于UDP,还是TCP?
TCP


2.用阻塞模式还是非阻塞模式?
建议WSAAsyncSelect或IOCP


3.服务器侦听,发心跳,命令从机退出等,我是在一个线程里完成,还是开不同的线程呢
常用的几个winsock IO模型的线程数不受自己控制,决定好用哪个以后,因地制宜,线程当然越少越好


4.怎么样让程序每隔一段固定的时间发送心跳包啊?那些包是不是定义一个结构体,用什么函数发这些包呢?
根据你选的IO模型,结合你的自定义协议,会有一个相当的便捷的方法
如果排除所有条件,心跳包就1个字节最理想,让对方知道你存在就行了,不过在具体操作中,你可能有自己的数据头协议,这里心跳可能是一个特殊意义的数据头,字节数尽可能少
最好不用keepalive,麻烦,


最好系统学一下winsock,做起来顺手~!
dirdirdir3 2009-08-28
  • 打赏
  • 举报
回复
1.不需要传大量数据的话UDP效率高些,否则用TCP
2.当然是非阻塞模式。
3.侦听一个,发送一个,消息处理在主线程。
4.系统有个选项的,keepalive,包就是些数据而已,数据是什么需要你自己决定了,
一般用CSocket来发送接收,

18,363

社区成员

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

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