请教关于局域网内无服务器的点对点通讯问题

CrazyAzreal 2010-05-21 11:30:30
我正在做一个模块,是一个局域网的点对点传送文件,发消息的模块,并且是没有服务器的。
目前假设有A,B两台主机,A,B主机每3秒会发送一次广播包(255.255.255.255),通知所有机子我们的存在,当B主机收到广播包,分析包内容是A主机发出的,则把A主机加入到B的在线用户列表,对于A也同样。这样就实现了一个“发现用户”的功能。然后A,B主机在发现完对方后,就已经有了对方的IP地址和TCP监听端口号了(这些数据包含在广播包里),即已经可以互相传送文件,发送消息了。

但是目前存在几个问题:
1.当局域网内出现多台主机(使用了我这个模块的主机),传送文件,发送消息之类的会变得不稳定,具体表现为传送过程中卡死之类的,跟踪之后错误也莫名奇妙。会不是发送广播包太频繁了?如果是这样,“发现用户”机制怎样弄,因为要考虑到及时性,不能A主机开了半天,B主机还没看到A主机。
2.退出机制,目前模块里有心跳包检测,在1分钟内,收不到某个主机的心跳包,则认为退出,这个正常。但是当程序退出时,模块会给“在线用户列表”的每个用户发送一个TCP包,通知他们本机要下线了,然后程序就退出了。这个过程很快,可能是刚刚send完后,程序就退出了,不知道有什么好办法,可以便得发送完退出包后再退出程序?
3.还有一个就是传送文件,假设现在有A,B,C,D,E五台主机,B,C,D,E主机同时向A主机主求不同的文件,A主机对应每个传送请求会另外创建一个线程来处理,但是这时A主机会变得很卡(机器性能还可以啦),是不是执行的事情太多了?有考虑过可以每传固定大小的数据后都sleep一下?但是sleep还是占用CPU时间片。。

总的说,这个模块,在对于只有两台主机(包括自己)的情况下是比较稳定的,主机一多,各种不稳定都出现了。。

请教大侠啊!
...全文
199 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-05-21
  • 打赏
  • 举报
回复
听着像飞鸽传书
反正是开源的下一个IPMsg的源码研究看看喽
至善者善之敌 2010-05-21
  • 打赏
  • 举报
回复
JF 。。。。。。。。。。。
CrazyAzreal 2010-05-21
  • 打赏
  • 举报
回复
我现在已经把整个模块写完了,在只有两台机子的情况是稳定的,但随着机子的增长,不稳定的情况随着机子的增多而增多。。。
CrazyAzreal 2010-05-21
  • 打赏
  • 举报
回复
meng,你指的广播原理具体是指?
我理解得比较简单,就是对255.255.255.255或具体网段的255地址发送包,就可以发送广播包。之前也有搜索过相关的信息,指出过多的广播包,可能会导致网络堵塞,但是如果不通过广播包来实现“发现机制”,又应该怎样实现?
【天运子】 2010-05-21
  • 打赏
  • 举报
回复
那你得搜搜 广播的源代码 看看原理
CrazyAzreal 2010-05-21
  • 打赏
  • 举报
回复
需求要求是没服务端的。。每台机子都为服务端和客户端。
可能不是用TCP模拟测试能解决,因为“发现机制”是通过每3秒发送广播包来实现的,这样当网内有多台机子以这样频率发送广播包,可能会出现网络堵塞的问题。。
【天运子】 2010-05-21
  • 打赏
  • 举报
回复
只用过TCP/IP的 ,有服务端就可以了 模拟测试嘛
向立天 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 crazyazreal 的回复:]
OK!研究了一下ipmsg的代码,发现他并不没有通过不断发广播包来检测上线下线,谢谢楼上的了!
[/Quote]
不客气
我也正在研究这个
不过照你差远了
呵呵
CrazyAzreal 2010-05-21
  • 打赏
  • 举报
回复
OK!研究了一下ipmsg的代码,发现他并不没有通过不断发广播包来检测上线下线,谢谢楼上的了!

18,356

社区成员

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

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