关于前台管理服务器的程序

小影zx 2011-09-12 05:34:15
同志们,我现在被卡住了!问题是这样的:
我写了一个server程序专门用于收集客户发送过来的使用软件情况包,并将该包存放在哈希表中,而现在我写了一个console端程序用来将服务器收到的用户使用情况反馈给管理者看,管理者需要三个命令,一个是list all,就是列出哈希表中所有的信息,第二个是查看包体中每个字段的总体数目,第三个是查询单个用户的信息,也就是查询某个包体,
在console与server之间,我用TCPsocket告知双方该怎么发送以及要求,也就是上述的三个要求,然后待server查到了之后就将信息通过共享内存发送至console端,但是该共享内存可能一下子接受不了这么多的信息,也就是没有这么大的数据空间,所以必须得分批通过shm传送,于是我定义了一个console与server之间的协议,
我的问题是,1.这个协议具体该怎么定制,比如说,那些信息从那个点开始,那个点结束,中间的包掉了或者是超时了怎么办?
2.怎么样遍历哈希表,将哈希表中的所有内容都通过共享内存传送至console端
...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-09-12
  • 打赏
  • 举报
回复
实现是公司内部资料,sorry = =。
小影zx 2011-09-12
  • 打赏
  • 举报
回复
可是,大哥,怎么样才能实现啊,我没有经验,您能否给我发一份差不多的例子?我的邮箱是535935637@qq.com,谢谢了,万分感谢
qq120848369 2011-09-12
  • 打赏
  • 举报
回复
其实就是在共享内存区做一个字节流环形队列,队列空的条件为front==rear,队列满的条件为剩余内存不足Reserve(自己定制的一个值,因为这里是字节流环形队列,区别于结点环形队列)。

通信机制console端可以单独起一个取线程,用进程共享条件变量+互斥量(此种情况需要给每一个消息加size字段来划分消息边界)做等待,由server端收到TCP请求后写队列,然后唤醒条件变量。

也可以用FIFO,这样的话可以取消消息的size字段,server写环形队列,之后往FIFO里写一个int size,这样console被唤醒,读取size,然后从环形队列取走size字节即可。


上述两种办法都需要锁,这个不解释。

其实简单点的,不用共享内存,直接一个FIFO传输数据不就得了?

console给server发TCP请求,server往FIFO里写数据,console读数据,消息边界还是利用size字段标识,你也可以用\r\n这种来划分,都可以。
alcz2008 2011-09-12
  • 打赏
  • 举报
回复
不懂帮顶。。。。。。。。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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