跳至主要内容

博文

目前显示的是 2016的博文

UDP穿越NAT原理

http://blog.csdn.net/ldd909/article/details/5979967 论坛上经常有对P2P原理的讨论,但是讨论归讨论,很少有实质的东西产生(源代码)。在这里我就用自己实现的一个源代码来说明UDP穿越NAT的原理。 首先先介绍一些基本概念:      NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。      最开始NAT是运行在路由器上的一个功能模块。      最先提出的是基本的NAT,它的产生基于如下事实:一个私有网络(域)中的节点中只有很少的节点需要与外网连接(呵呵,这是在上世纪90年代中期提出的)。那么这个子网中其实只有少数的节点需要全球唯一的IP地址,其他的节点的IP地址应该是可以重用的。      因此,基本的NAT实现的功能很简单,在子网内使用一个保留的IP子网段,这些IP对外是不可见的。子网内只有少数一些IP地址可以对应到真正全球唯一的IP地址。如果这些节点需要访问外部网络,那么基本NAT就负责将这个节点的子网内IP转化为一个全球唯一的IP然后发送出去。(基本的NAT会改变IP包中的原IP地址,但是不会改变IP包中的端口)      关于基本的NAT可以参看RFC 1631      另外一种NAT叫做NAPT,从名称上我们也可以看得出,NAPT不但会改变经过这个NAT设备的IP数据报的IP地址,还会改变IP数据报的TCP/UDP端口。基本NAT的设备可能我们见的不多(呵呵,我没有见到过),NAPT才是我们真正讨论的主角。看下图:      有一个私有网络10.*.*.*,Client A是其中的一台计算机,这个网络的网关(一个NAT设备)的外网IP是155.99.25.11(应该还有一个内网的IP地址,比如10.0.0.10)。如果Client A中的某个进程(这个进程创建了一个UDP Socket,这个Socket绑定1234端口)想访问外网主机18.181.0.31的1235端口,那么当数据包通过NAT时会发生什么事情呢?      首先NAT会改变这个数据包的原IP地址,改为155.99.

P2P内网穿透原理_Simple

http://blog.csdn.net/jiabailong/article/details/51482394 大概在一年前我就研究过P2P技术,但始终攻不破NAT内网穿透这个难题(因为本人小菜,对于网上说的一些原理始终没看明白),所以也渐渐开始淡忘这门技术了。(用了P2P技术,就可以实现无需路由的端口映射内网与内网或内网于外网直接的通讯,记得在邪八的一位大牛在谈下一代木马问题的时候就说过:下一代的木马应该用P2P技术在网络组建巨大的P2P网络,而控制端就隐藏在这巨大的P2P网络中,大大提高控制端在网络中的隐身程度)          前几天我突然对P2P技术又产生了浓厚的兴趣(也不记得是出于什么原因了),并且研究了一个下午之后终于弄清楚它的原理并用了半天时间写了一个简易的基于P2P协议的聊天工具,具体源码我会在“编程技术”这个板块发布。           注意,文章比较长,想掌握P2P技术的请认真看完,好好理解,不懂的可以回帖提问,我会尽我能力进行解答!因为本猪能力有限,文章出现的错误还请大牛们不吝改正。          PS: 红色的文字代表重点 ; 蓝色的表示次重点          首先先了解一下P2P技术,下面的文章源于百度(增加了个人的说明)。          点对点技术(peer-to-peer, 简称P2P)又称对等互联网络技术,是一种网络新技术,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上( 这种技术可以大大减轻服务器的负担 )。P2P网络通常用于通过Ad Hoc连接来连接节点(从而实现了节点之间的通讯)。这类网络可以用于多种用途,各种档案分享软件已经得到了广泛的使用( QQ聊天、迅雷、大部分网络播放器都使用了该技术 )。     其他介绍请看: http://baike.baidu.com/view/21058.htm      还有关于NAT的介绍的百科: http://baike.baidu.com/view/16102.htm   (有兴趣了解的可以去看看,不看也行,这篇文章里我会进行部分介绍)          其实P2P技术并不难,关键了理解了其中的原理,实现了NAT内网穿透,那么就可以轻松写出一个基于P2P协议的软件。          另外需要说下的就是: P2P技术也有基于UDP协议和TCP

linux system monitor

KDE System Guard: pacman -S ksysguard Top: $top

安卓EditText 输入时回车键的监听

先设置edittext的imeOptions属性 Java code ? 1 android:imeOptions= "actionDone" 然后设置edittextview的setOnEditorActionListener事件 Java code ? 1 2 3 4 5 6 7 8 edittext.setOnEditorActionListener( new   OnEditorActionListener() {          @Override          public   boolean   onEditorAction(TextView v,  int   actionId, KeyEvent event) {              if   (actionId == EditorInfo.IME_ACTION_DONE) {                  // do something              }              return   true ;          });

android animation中的参数interpolator详解

anim.setInterpolator(new AccelerateInterpolator()); XML:interpolator ="@android:anim/accelerate_interpolator" Android :interpolator     interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画效果可以 accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。   android 自带的interpolator       AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速      AccelerateInterpolator  在动画开始的地方速率改变比较慢,然后开始加速    AnticipateInterpolator 开始的时候向后然后向前甩    AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值    BounceInterpolator   动画结束的时候弹起    CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线    DecelerateInterpolator 在动画开始的地方快然后慢      LinearInterpolator   以常量速率改变      OvershootInterpolator    向前甩一定值后再回到原来位置

adb视频录制命令screenrecord

Android视频录制命令screenrecord 你要知道: screenrecord是一个shell命令 支持Android4.4(API level 19)以上 支持视频格式: mp4 一些限制 某些设备可能无法直接录制,原因是分辨率太高,如果遇到此类问题,请试着指定较低的分辨率 不支持录制过程中屏幕旋转,如果录制过程中旋转,有可能画面被切断 录制视频的时候声音不会被录下来 开始录制命令: adb shell screenrecord /sdcard/demo.mp4 说明:录制手机屏幕,视频格式为mp4,存放到手机sd卡里,默认录制时间为180s 限制录制时间: 参数: --time-limit adb shell screenrecord --time-limit 10 /sdcard/demo.mp4 说明:限制视频录制时间为10s,如果不限制,默认180s 指定视频分辨率大小: 参数: --size adb shell screenrecord --size 1280*720 /sdcard/demo.mp4 说明:录制视频,分辨率为1280*720,如果不指定默认使用手机的分辨率,为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小 指定视频的比特率 参数: --bit-rate adb shell screenrecord --bit-rate 6000000 /sdcard/demo.mp4 说明:指定视频的比特率为6Mbps,如果不指定,默认为4Mbps. 你可以增加比特率以提高视频质量或为了让文件更小而降低比特率 在命令行显示log 参数: --verbose bixiaopeng@bixiaopeng wirelessqa$ adb shell screenrecord --time-limit 10 --verbose /sdcard/demo.mp4 Main display is 1080x1920 @60.00fps (orientation=0) Configuring recorder for 1080x1920 video at 4.00Mbps Content area is 1080x1920 at offset x=0