P2P客户端该Bind几个UDP端口?

SmallBigCat 2004-12-27 10:24:29
谢谢,请有经验的老鸟答复,分不够可以再加!
...全文
410 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
SmallBigCat 2004-12-31
  • 打赏
  • 举报
回复
再订
yaotang 2004-12-30
  • 打赏
  • 举报
回复
不错,关注
SmallBigCat 2004-12-30
  • 打赏
  • 举报
回复
oyljerry 2004-12-29
  • 打赏
  • 举报
回复
Symmetric NAT的端口会变化,需要猜测
oyljerry 2004-12-29
  • 打赏
  • 举报
回复
每个应用一个端口号
SmallBigCat 2004-12-29
  • 打赏
  • 举报
回复
再顶
SmallBigCat 2004-12-29
  • 打赏
  • 举报
回复
to oyljerry(☆勇敢的心☆-Paper Reviewing):

是一个应用,只是会与多个在线好友同时对话
SmallBigCat 2004-12-28
  • 打赏
  • 举报
回复
to phoenixsharp(小星星):

1.是有一个公网的服务端
2.我这里指常用的、非Symmetric NAT


与你QQ的原理是一样的,就是在某种特定的NAT下,比如A有3个好友B、C、D在线,A会定时给B、C、D发送激活包(当然B、C、D也会给A发送激活包);此时A如果想与B、C、D中的任一方发送消息,就会不通;如果A的好友只有B、C、D中的一个在线,则A发送消息就能通过;


现在还不能确定是A所在NAT的原因,还是B、C、D所在NAT的原因,测试中B、C、D是在一个NAT下,其NAT类型为Symmetric NAT
phoenixsharp 2004-12-28
  • 打赏
  • 举报
回复
1.俺也做过QQ,不知道楼主的具体程序结构是怎么样的?把你的大致思想说出来看看,应该有一个公网的服务端吧?请详表。
2.非对称NAT是不是俺说的那种一个SOCKET发给多个人,NAT会生成不同的端口?不好意思,俺对概念不是很感冒?有劳解释一下。

P.S:我写的QQ只需要知道众好友的(经NAT的)IP:PORT--》通过SERVER获得;即可通讯。
SmallBigCat 2004-12-28
  • 打赏
  • 举报
回复
顶,人人有分
skfox 2004-12-28
  • 打赏
  • 举报
回复
uo
SmallBigCat 2004-12-28
  • 打赏
  • 举报
回复
to phoenixsharp(小星星):

是及时通讯方面的应用;



现在遇到的问题是:

有A在某些端口限制的非对称NAT下登录,如果A同时与多个在线好友对话,此时A与好友之间的UDP通道是不能够通的(及对方收不到A发送的激活包);如果A只有一个在线好友或只与其中一个好友对话,则对方能够收到A发送的激活包;经检测A的NAT类型为端口受限的非对称NAT;


不知这种情况如何解决?
phoenixsharp 2004-12-28
  • 打赏
  • 举报
回复
楼主究竟是什么应用,为什么要开多个端口,而且还要BIND/?,一个端口也可以干很多不同的事啊,数据里弄一个标识头,什么样的类型干什么样的事。
有些NAT是这样:A to S 和 A to B会NAT不同的端口,如A TO S(NAT PORT:2003) 而A 再发数据给B,NAT PORT 变增为2004或其它,这是一种不愿意看到的行为;而大多数的NAT保持端口不变,只是在这个端口上加一个A TO B的SESSION。这是值得表扬的~~~~
SmallBigCat 2004-12-28
  • 打赏
  • 举报
回复
kingzai 2004-12-27
  • 打赏
  • 举报
回复
一般是一个端口。如果在同一台机,开多个实例,比如开两个QQ,就是一个4000,另外一个则4001
SmallBigCat 2004-12-27
  • 打赏
  • 举报
回复
谢谢

我问的是诸如及时通讯之类的软件,需要绑定几个端口
zhangqu_980371 2004-12-27
  • 打赏
  • 举报
回复
20000以上就没有问题了(不要和系统、其他软件有冲突就可以)。
到了网关,网关会转换的别的断口。
SmallBigCat 2004-12-27
  • 打赏
  • 举报
回复
比如QQ一样的及时通讯之类的
HunterForPig 2004-12-27
  • 打赏
  • 举报
回复
说说你的具体应用
kingzai 2004-12-27
  • 打赏
  • 举报
回复
看具体的应用
加载更多回复(6)
1. 连接oracle时,目录中不能有()字符,否则ADO是无法连接数据库的 修改: 2.1 去掉TCPChannel的BuildPacket函数,改成直接由OnRecv回调函数返回实际数据 去掉UDPChannel的Response函数,改成直接由内部处理 2.2 修改TCPChannel类,实现同步调用接口 定义IRPC接口用来处理同步调用的被调用端 定义Bind函数用来绑定IRPC接口的实例 定义CallEx函数用来实现用户同步调用 2.3 添加bInit变量,用于设置初始化和关闭状态。 设置此变量的目的主要是用来控制,在关闭了socket之后,后续的任何投递都不执行。 修改了IRPC接口名称为IRemoteProcCall,并且调整了部分结构体名称,如RPC相关的结构体, 组合包相关的结构体,以及P2P相关的结构体。 修改TCPChannel类的接口函数BindBindEx,使之与TCPChannel的其他接口统一命名。 修改测试Demo,添加多发选项 修改DataType.h中的内存块大小定义 封装临界区类,信号量类 修改TCPListener接口类中的EnumSockets接口,添加pArg参数 Socket类添加ReUseAddr函数,用来设置端口重用 TCPSocket接口类添加GetListener接口用来获得链接管理对象 修改Demo实例中的TCP客户端部分,增加可更改客户端连接数 2.4 添加UDT支持 修改UDPChannel接口类,添加UDT支持接口函数 添加日志支持 添加接口类ILogger,用来实现对日志的输出 添加x64的编译环境 添加部分WARN级别的日志输出 添加C接口,方便非C++语言应用 UDT添加特性,关闭UDT时,给对端发送断线信息,通知对端断线 UDT提高效率,UDT句柄部分改用读写锁来控制,以提高效率 修改OnSend和OnSendTo的行为 修改过的BUG: 1. 数据发送时,如果数据大小正好是MAX_PACKET_SIZE个字节的话,数据发送不出去,在计算包大小时,边界值没处理好。 2. IOCPUnhandledException函数内部逻辑错误,没有关联到自己的异常处理函数中,导致即使调用成功,程序异常了,也无法写dump文件。 3. 修复IOCP UDP Release模式下不能正常运行的BUG。由于传递的输出参数使用了局部变量导致的问题 4. 修复UDT发送时,计算尾包大小错误 5. 修复UDT快速发送错误 6. 修改Queue关闭时,如果有线程正在等待信号,会导致线程死等

18,356

社区成员

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

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