请大家帮忙分析下(关于winsock)

BraveHeart2222 2007-07-17 06:15:12
本人在做个点对点及时聊天模块,设计结构是:
1、如果打洞成功,则消息直接进行点对点发送;否则消息通过服务器转发。
2、若对方不在线,消息由服务器保存,对方登陆成功后再转发给对方。

现在的情况是:
在局网内一切OK,可当将服务端放到一有公网IP的机器上后,发送的消息,对方收不到(已知道打洞未成功,所以服务器收到了消息进行转发,可是转发后,对方并未收到)
但是,发送时,若对方不在线,消息由服务器保存,对方登陆成功后能正确接收到消息

因服务器端机器不在公司内,无法安装VC进行调试,请高手们帮忙分析下可能的情况
...全文
207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
BraveHeart2222 2007-08-13
  • 打赏
  • 举报
回复
都没点建设性的意见,也只有结帖了!
mynamelj 2007-07-30
  • 打赏
  • 举报
回复
打洞本来就不是一件容易的事,首先你要把打洞技术钻透才行。
zhyaaa123 2007-07-30
  • 打赏
  • 举报
回复
看来你是用TCP打洞,有点困难,UDP要简单点
soft_tl 2007-07-30
  • 打赏
  • 举报
回复
数据穿过NAT时方式不对
BraveHeart2222 2007-07-30
  • 打赏
  • 举报
回复
谢谢各位,已解决了,原来是这样:
当时为了简单起见,创建了两个SOCKET,分别用于发送与接收,这在局网内没啥问题,可在公网上就不行了(这就是NAT的功劳,不同的SOCKET,NAT会映射不同的PORT),所以在公网上,你用的是哪个SOCKET注册到公网上,就必须用哪个SOCKET接收、发送。
不过还有个问题,为何我总是打洞不成功,是因为我的两个客户端都在同一个NAT下的原因吗?请大家发表下高见(分是要结的)!
loverx 2007-07-18
  • 打赏
  • 举报
回复
The problem may due to the receiption site

check the code about recv( or recvfrom ),to check whether the recv exits abnormalitily or not
i_love_pc 2007-07-18
  • 打赏
  • 举报
回复
如果打洞未成功,是不是也不能保证对方跟服务器的是连接的呢?
DentistryDoctor 2007-07-18
  • 打赏
  • 举报
回复
写点日志,然后根据日志来进行分析。
lyg_zy 2007-07-17
  • 打赏
  • 举报
回复
顶,关注

18,356

社区成员

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

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