‘壹’ java中FileInputStream的available() 方法的作用是什么
①如果要从网络中下载文件时,我们知道御悔网络是不稳定的,也就是说网络下载时,read()方法是阻塞的,说明这时我们用inputStream.available()获取不到文件的总大小。
此时坦拆氏就需要通过
HttpURLConnection httpconn = (HttpURLConnection)url.openConnection();
httpconn.getContentLength();//获取文件长度
来获取文件的大小。
②如果是本地文件的话,用此方法就返回实际文件的大小。
③这个方法其实是通过文件描述符获取文件的总大小,而并不是事先将磁盘上的让散文件数据全部读入流中,再获取文件总大小。
希望能用心去体会一下,选择性使用
‘贰’ java 中解析TLV格式数据 可以用哪些工具包呢谢谢啦~
网络下格式,然后手动解析
‘叁’ 急救,计算机英语全称是什么
这些金融专业的术语你会不知道啊?可能你是外国人不了解中文,我一一为你虚宏解答如下:
CDA,Combined DDA/Application Cryptogram Generation复合数据认证/应用密文生成
DDA,Dynamic Data Authentication动态数据认证
SDA,Static Data Authentication 静态数据认证
DES,Data Encryption Standard 数据加密标准,国内还是叫DES
SHA1,Secure Hash Algorithm 1安全哈希散列算法1,有1当然还有128,1046之类的咯
RSA,Rivest, Shamir, Adleman Algorithm几个人名命名的非对称算法,没有中文,称RSA
MD5,Message Digest 5消息 (报文也可以)摘要算法5,有5,当然有4
IDEA,International Data Encryption Algorithm国际数据加密算法
TC,Transaction Certificate交易证书,接受交易时,IC卡给出
AAC,Application Authentication Cryptogram应用授权密文,用于拒绝交易
ARQC,Authorisation Request Cryptogram授权请求密文,终端请求
ARPC, Authorisation Response Cryptogram授权响应密文,收单行返回
GAC,GPO,两条IC卡命令的缩写,即Generate AC和Get Processing Option(应用密文生成,取处理选项名令)
DOL,Data Objects Lists数据对象列表
TLV,BER编码一种,ASN1标准,全称Tag(标签),Length(长度),Value(值)
TAC,Terminal Action Code终端行为代码
IAC,Issuer Action Code发卡行行为代码
AFL, Application File Locator应用文件定位器
APDU, Application Protocol Data Unit应用协议数据单元,报文结构组成
ATM, Automated Teller Machine自动柜员机(出纳),ATM机
ATC, Application Transaction Counter应用交易计数器
AUC, Application Usage Control应用用途控制
BCD, Binary Coded Decimal码制则侍,BCD吗,又差盯册称二进制-十进制码
BER, Basic Encoding Rules基本编码规范 (定义在 ISO/IEC 8825-1)
CDOL, Card Risk Management Data Object List卡片风险管理数据对象列表
DDOL,Dynamic Data Authentication Data Object List动态数据认证数据对象列表
FIPS,Federal Information Processing Standard美国标准啊,全称,联邦信息处理标准
IBAN,International Bank Account Number国际银行帐号数,标识
PDOL,Processing Options Data Object List处理选项数据对象列表,交易初始化用
PAN,Primary Account Number主帐号
PSE,Payment System Environment支付系统环境,通常建立在IC卡上
TVR,Terminal Verification Results终端验证结果
TSI,Transaction Status Information交易状态信息
‘肆’ 诺基亚5320使用效果怎样
5320到手已经有两个月了,虽然中间穿插着在用6650,但还是5320用的时间长一些(某人说6650外形好俗,还说我用6650看起来好像大叔,不让我用了,现在连用什么手机手表的都被管,呵呵呵……),对于这个手机,算是有了比较全面的了解。5320的基本情况我想大家已经很了解了,不再重复,本来想就着国庆放假的机会把在论坛上收集到的各位比较关心的问题做一总结,但是一拖再拖又赶上出差,就拖到了现在……希望本文能对打算入手或者刚刚入手的朋友有所帮助。
如果各位觉得我写的前几篇文章乱七八糟的东西看不懂没意思,那也是作者我的失败,我希望能通过我的方式把问题解释清楚,有的东西东扯西扯写的比较乱,您觉得好与不好都没有关系,只要结论您能有一丁点受用,我就知足了。关于软件方面,我不是行家里手,研究不深。好在论坛上高手不少,S60 3rd Edition Feature Pack 2的兼容性亦不错,软件方面的教程可借鉴性好,大可参考其他机型的丰富资源,在这里就不献丑了。
1.最受关注的杂音问题
作为音乐手机的5320,杂音是个比较致命的问题,所谓音质或者杂音爆音是个比较主观的东西,同一台手机可能有的人认为有点破音还可以接受,有的人则认为简直就是没法听,所以机油们对这个问题反应不一。
首先说内放,这是5320作为音乐手机的主打功能,之前我说过以5320的配置来看其音质在音乐手机中也是一流的,Nokia自然很清楚这一卖点的价值,最近的新机,尤其是冠以音乐手机之名的基本都采用了TLV320DAC33+TPA6130A2的方案,N系更是如此,甚至是一些中低端机型上也有采用,看来诺基亚的大单采购拿到的价格确实低廉。先说说这个TPA6130A2,TPA6130A2是基于充电泵的耳机放大器,Maxim的类似技术称电荷泵,由于不需要隔直电容因此集成度很高,也提供了差动输入,从而抑制输入端产生不必要的共模噪声,电源纹波抑制比PSRR达到了109dB,音频模块的屏蔽做的也很不错。但是即便这样离消除信号噪音的距离还是很远,手机是一个大功率的无线电信号发射源,其电路复杂内部的电磁环境很恶劣,对于音频电路来说这可不是好事情,尤其是智能手机其复杂程度更上一层楼。同样是TLV320DAC33+TPA6130A2方案,音频部分电路设计基本一样的智能机5320和非智能机5220,理论芦巧上讲其音频特性应该是非常接近的,但是RMAA测试成绩5220每一项都比5320要好一点点。我一直认为,手机这个东西听听收音机,听听评书,听听陪告键相声就好,没必要追求什么音质不音质的,真要让手机达到高质量MP3播放器的水平难度很高,要谈HIFI就更难了。再举一个极端的例子iPhone借鉴了不少iPod的音频电路设计,同样采用Wolfson的WM8758,音质却不能与iPod比肩,类似的还有诸如SONY的WALKMAN和SE的WALKMAN手机,当然这其中有厂家的控制因素,防止自相残杀或者低端冲击高端市场,更主要的因素还是数码产品本身的体质差异造成的。不小心说了这么多废话,意思是告诉大家不要对一个手机的音质有太苛刻的要求,下面进入正题,对于电磁波干扰的问题,比如在待机状态下长间隔周期性的啪声或者在上网时连续的噗噗声,是由于5320的设计缺陷屏蔽不到位的缘故,机油们的应对办法就是用离线模式,关闭BT,就可以收到明显的效果,不过这时相当于手机已经关机了,只作为一个S60系统的PDA在运行。对于电路内部的干扰,无法解决,这是设计的问题,好在这点不太严重。
再说外放,其实外放受信号干扰也是比较厉害的,使用离线模式会有较大改善,除了电磁波干扰之外,外放的扬声器太差是主要的原因,这个小喇叭说他劣质也不算对不起它,这也是设计和成本因素的问题,另外一些音效也有些负面影响,比如立体声强化是为了使双扬声器手机的外放声场更开阔,它不仅包括了EQ也有音频相位的调整,5320只有一个扬声器,是把两个声道的信号混合后放大播出的,这个音效对5320没有任何作用,打开之后反而会使声音友仔失真,如果同时又使用了响亮的模式,更会导致输出波形被削峰而产生爆音,所以这些音效不要开。一些机油说存在软件的BUG导致的破音,重启能够解决,不过我的这一台似乎没有这种情况。而且我认为外放杂音主要问题并不在软件,通过升级固件很难解决。
2.关于LED补光灯
很多朋友都拆开看过了,虽然补光灯透镜有两片,但是LED实际上只有一颗。5320凭借这个外观唬住了不少人,包括我在内,都以为是两颗LED,拆开之后方才发现另一颗里只不过是一张黑色的贴纸上贴着一张米黄色的贴纸而已。诺基亚为什么要这么做,真是难以理解。我询问了一个国外测试工程样机的朋友,据他说工程样机上,也就是那个背部手握部分是条纹状防滑设计,NOKIA标志是刻线的那一版本(现在的批量生产机型背面是颗粒状防滑设计,NOKIA字样的标志为印刷),LED是两颗,但是后来修改了LED的设计却并没有修改透镜的设计,所以国外一些非常早期的宣传说是两颗LED并非是故意蒙骗大家,工程样机上最初的设计就是两颗,早期翻译国外的评测说有两颗LED也就并不奇怪了,可惜的是这一阶段的内测是保密的,没有找到任何细节照片。后来到了4~5月份国内各大网站拿到的工程样机,虽然还是条纹+刻字的背面设计,但是LED已经改为一颗了,这一批机器修改了机身框架的形式,却没有修改LED的透镜,也没有贴上那张伪装贴纸,这样其中一个透镜里的颜色就是边框的颜色,看起来非常别扭,所以正式定型生产的手机上只好贴上贴纸以防穿帮。其中原因我想有二:其一因为5320是低端机,所以诺基亚竭尽所能压低成本,5320的元件用料本来就比较吝啬,配置上大多是能省则省,就算是N78也才只给配备了一只LED,只有N96这样的机器才给配两颗LED,5320自然不会用上两颗,连环境光强传感器都省了,这样修改也就不足为奇了,官方的广告宣传和说明书中都没有提及是两颗,只说有LED补光灯。其二,因为5320的LED并不是直接焊在电路板上,而是焊在一片排线上,不利散热,两颗方块的高亮LED的发热量比较可观,我猜测可能对器件寿命有一些影响。剩下的一颗LED因为位置太偏,所以没法把透镜修改成一片(其实后盖的模具都重开了,改这一片又算得了什么呢,设计成一片也不会有人骂),到了机器差不多定型了只好临阵磨枪,才有的这一出贴纸换LED的闹剧。
3.电池问题
电池是5320绝对的软肋,功能强大电池小,连自动亮度调节也被省掉了,待机时间肯定不会理想。前些天出差时电话狂多,幸亏带的是大电池的6650,不然带着5320出差去真的要被急死了。不过看到不少机油说电池一天都撑不过就绝对不正常了,我这台的电池一般可以使用两天左右,要是多听听评书也就是一天多的样子(最近听田连元的大话成语,不错),论坛上绝大多数的机油也都是使用1到2天。购买时首要的问题是千万要提防电池被换成组电,关于原电组电如何鉴别的问题网上说的很多,想要购买的朋友一定要看一下。
可能很多人对于官方标称的使用时间表示质疑,这里作假的情况倒是不会发生,水分都是在实验方法上,官方的标称值都是最长使用时间,一般是在标准环境恒温恒压恒湿的情况下,即最理想的使用环境,并且关闭一切无用功能进行实验,音乐播放时间的测定方法则是离线模式关闭其他一切功能,用一个很低的音量通过耳机播放测得的,所以平时使用时是不可能达到的。
有兴趣的可以找一个Nokia Energy Profiler装上测试一下手机的功耗以及电池的容量,这个软件对鉴别电池真假也有一定作用。不过软件测得终究不准,我自己也做了一个小实验,手机接3.7V的直流稳压电源,测测实际的工作电流,因为我没有专业的电子负载仪,并且手机的工作电流总是有跳动,仅能通过平均值大致的估计一下功耗。开机电流大约在100mA左右,最高在110mA,可能是登录网络,开机稳定后进入黑屏待机的情况下,电流在10~15mA的范围内变化,很平缓但是非常有规律,这时按任意键屏幕键盘背景灯点亮,电流为50mA左右,打电话在拨号的时候电流最高,达到了300mA,接通之后回落到150mA左右,背景灯熄灭之后降到100mA左右,发送短信时大约在100mA左右,用内置音乐播放器和耳机听音乐电流大约是60mA,因为连着导线没法玩,N-Gage游戏只是进入游戏测试了一下,电流150mA左右。WCDMA也没法测试,但是从诺基亚官方的通话时间数据GSM: up to 3.5 hours WCDMA: up to 2.5 hours这点来看,GSM看起来还是比较省电的,发射功率也相应的小些。
以上数据说明,我这一部手机的实际待机功率大约是0.04W,比软件测得的0.09W低了一半还多,说明这个软件也是通过电池电压等参数推算功耗。按这个功率估算,890mAh的BL-5B电池的待机时间为82.3小时,约合3.4天,即什么都不做也只能待机3天多一点,如果电话多又玩的比较很的话一天多是很正常的,这个电池对于5320来说真的太小了。而且我们可以看到,在在线模式下播放音乐,理论上只能有14.8小时的播放时间,还是比较耗电的。屏幕和键盘背景灯也是耗电大户,因为没有自动亮度调节,如果一直点亮的话也撑不了一天,再加上短信游戏上网等操作,耗电十分可观。N-Gage游戏非常耗电,几乎和通话差不多了。
抛开电池太小的问题不谈,5320本身的耗电也算是比较大的了,静态电流偏高,我认为这可能和电路设计上的简化以及所用元器件的品质较差有关,归根结底还是因为5系手机中低端的定位吧。这里不禁要感慨一下,诺基亚的5系算起来是我最喜欢的一个系列,5系手机展现了诺基亚设计中的年轻活力、特立独行、动感张扬的一面,每一个设计都有亮点,其中不乏精品,自己有手机以前曾经看着别人的5510流口水,5510让我见识到了什么才是真正的QWERTY键盘,到后来的三防强机5140i,方屏智能5500,到现在的XM系列,对每一部都如数家珍,但是5系也是一个让人有点无奈的系列,每一部手机都是毛病多过亮点,我形容5系手机是那种“买来的头一个月让你爱不释手,第二个月却让你叫苦连连的手机。”
说到这里又让我想起了刚刚发布的5800XM,这又是一款让人万分期待的手机,然而我对其质量并不抱什么幻想。见到真机之后印证了我的想法,这款手机的数字8并不是在第一位的系列号上,仍旧无法摆脱5系魔咒……
废话说了这么多回到正题,最后有一点猜想,国行5320因为减掉了前置摄像头和WCDMA模块,或许会稍微省一点点电,手机中任何一个部件的休眠都不是物理上的断开,所以还是会有漏电流,一个典型的例子就是老迅驰笔记本电脑的内置摄像头即便不工作也会耗电的BUG,当然那只是个BUG。因为我手里没有行货没法测试,只是猜想。
4.导航键和游戏按键手感的问题
确定键串键想必大家都已经知道的了,需要按下的位置比较正中,否则会连带方向键,个人感觉习惯之后没有太大问题,可是偏偏有人嫌不好用,我一位朋友让我帮他改,我还是老方法,在确定键的四边上碗状簧片对应的地方用球头雕刻铣刀挖掉一丁点,可以在一定程度上减轻这种现象。我也发现一个有意思的DIY,他觉得游戏按键不好按,菜单键和C键也不好按,此人是PSP玩家,用了PSP上最常见的办法,就是把按键加高,在按键上粘塑胶板,就是把手机SIM卡的框架或者废IC卡之类的东西,裁剪成合适的形状打磨边沿后粘上,这样改造后相当于按键突出了一些,手感能够得到一定的提升,但是结果是,极大的破坏了外观,手机好像被破了相一样,除非您极度看重游戏手感,或者有一双大手,否则我本人不建议这样的改造。另外粘的时候注意最好拆下来粘,不要把按键给粘死了。
最后插一点,我把自己机器的键盘背景灯换成了红色贴片LED,但是感觉非常不成功,LED是从剩余零件一大堆里随便找的,换上之后给人非常燥热刺眼的感觉,建议各位如果要改键盘灯,一定要选择色温较低的红色LED,这样比较深邃幽暗,效果好。
5.关于GPS功能
有的JS还在通过文字游戏玩偷换概念,在这里再强调一下,A-GPS即Assisted Global Positioning System,意为辅助全球卫星定位系统,其实就是我们常说的基站定位技术中的一种,主要功能是通过现有的蜂窝网络提供GPS矫正参数,辅助GPS定位,使得定位更迅速,更准确,并且能够在一些收不到卫星信号但是有网络信号的地方,比如地下室,山洞里面实现定位功能。A-GPS区别于其他基站定位技术的关键在于与传统GPS技术,通讯技术相结合,首次定位的开机信息可以由当地GPS基准站通过网络来发送,解决了GPS传输速率低下的问题(GPS卫星数据传输速度只有50bps),并且手机可以将一部分运算分担到网络上的AGPS server来完成,提高了定位速度和精度,但是这都是在手机内有GPS模块的情况下,5320并没有内置GPS模块,直接使用的话定位原理和普通的网络定位没有什么区别。纯网络定位的精度很低,而且每次定位会产生一定的流量,基本没有什么实用性,是不可能替代传统GPS的。如果需要GPS功能还是要购买一部外置的蓝牙GPS模块为好,但是个人认为,5320的屏幕过小,用它做导航实在太勉强。
6.CPU的问题
5320的CPU型号已经很清楚了,但是有少数人对CPU这个问题非常较真,一直认为软件测出来的是准确的,觉得自己被骗了的感觉,因此这里再强调一下5320的CPU是Freescale MXC300-30,这个CPU具有自动降频节能的特性,空载下主频很低,因此用软件是测不准的,凡是诺基亚官方数据为:Single CPU CPU Type: ARM 11 CPU Clock Rate: 369 MHz基本都是这个CPU不会有错。这里要说一下,有一篇网上流传极广的NOKIA手机CPU分析的文章,作者指出Freescale MXC300被诺基亚称之为Single CPU而TI OMAP1710称之为Dual CPU的差异之处在于,1710多了一片TMS320C55x的DSP来负责通讯机能,而Freescale MXC300没有,事实上Freescale MXC300也内置了负责通讯机能的StarCore SC140 DSP up to 250 MHz,在这个意义上讲二者没有差距。TI在关于OMAP处理器的介绍中提到,OMAP系列是一个多引擎架构,其中包含一个ARM处理器、一个DSP引擎以及一系列用于处理三维成像渲染、视频编码解码、静态图像压缩、Java和安全性的软件和硬件加速器,这些协处理器才是Freescale MXC300所不具备的。另外提一下,freescale MXC300-30的官方技术文档中对其核心的描述是ARM11 applications processor up to 532 MHz,主频要比现在手机上用的高得多,369 MHz的运行频率是诺基亚强制降频得到的,原因其一是为了节能方面的考虑,如同SONY把PSP的CPU从333Mhz降为222Mhz来使用一样,其二是诺基亚认为532 MHz在现在来讲是完全没有必要的。至于MXC300是不是也能像PSP一样解除锁频就不得而知了。
‘伍’ jstl-impl.jar有什么用
你那个 项目里面好像没有添加这个 东西,所有不会自动弹出来,也不能调用。
解决的办法就是: 把jstl-impl.jar放到项目里面去
‘陆’ c#作为服务器 java作为客户端 定义消息格式
简单点。全部打包成2进制流。前后台打包和解包的方法定义好。
‘柒’ java中host和post
hosts文件相当于手机的电话信雀簿,DNS相当于本地的114
hosts是一个没有扩展名的系统文件,可以用vi和记事本等工具打开,其作用就是将一些常用的域名与其对应的ip
地址建立联系,当用户在浏览器中输入一个需要登陆的网址时,系统会首先从hosts文件中寻找对应的ip地址,一旦找到
系统会立即打开对应的网页,如果没有找到,系统会将网址提交给DNS域名解析服务器进行ip地址的解析,hosts的请求级别比DNS高
DNS的作用跟hosts一样,也是用来解析IP地址的,只不过hosts文件用户可以自由修改,不过DNS上的内容用户是无法修改的,不过用户
可以选择使用哪个DNS服务,一般默认使用电信服务商的,但也可以选择第三方的DNS服务,比如Google,阿里,网络等
http协议
HTTP协议简介
协议规则:内容本身
特点:
1.传输过程明文传输,安全性比较差
2.HTTP协议是一种无状态的协议,所以每一个Request都是不相关的
3.应用层协议
HTTP状态码
HTTP协议请求
GET获取服务器的资源
POST在发送信息给服务器,发送信息作为post请求的正文
HTTP响应
HTTP Session
session id 唯一标识客户端,浏览器的身份(服务器分配),服务器后端有一个表就是sessionID对应的的信息(是否已登录,用漏饥户名之类的),
保存在服务器滑搜早端
解决HTTP的无状态
HTTP Cookie
保存在客户端
浏览器读取本地的cookie(通常存放session id)
浏览器访问cookie对应的域名作用域,浏览器将本地存相应域名对应的cookie信息(session id)发送给服务器,服务器过根据session id 找到对应
状态信息
Java实现Get.Post
package cn.itcast.day04.demo01;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class JavaHttpHander {
public static void main(String[] args) {
//sendGet("https://www..com/");
sendPost("https://sso.tju.e.cn/cas/login?service=http%3A%2F%2Fclasses.tju.e.cn%2Feams%2FhomeExt.action%3Bjsessionid%.std5","username\t2019216092\n" +
"password\txgh961120\n" +
"execution\t9e0b8d3e-c5b1-4508-b0ab-24c42dd17de4_…xblQXhPODB6UUMHNB\n" +
"_eventId\tsubmit\n" +
"geolocation\t");
‘捌’ linux服务器接收发送报文
它使用状态的“关联”(协会),两对SCTP用户协议之间的信息交换条款的定义。 SCTP也是一个面向连接的,但在概念上,SCTP“关联”更广泛的TCP连接相比,只有一个TCP连接的源地址和目的地址,SCTP提供了另一种方式为每个SCTP端点的运输提供了一组地址等端点传输地址= IP地址+端口号。
继承的TCP功能的基础上,SCTP提供了一些额外的功能:
1有序传输中的用户数据的多个“流”(流)
“流”是一系列的TCP中指的字节,而在SCTP是指某个系列的用户消息被发送到上层协议,这些消息的顺序与在流之内的其他消息。当建立关联,SCTP的用户的数据流的数目,可被提供给相关联的载体。此号码被商定的流的??数目与源端的用户相关联的消息。 SCTP为每个邮件中的链接发送给同行的流分配的序列号。在接收端,SCTP,以确保在一个给定的消息流的顺序被发送。另一方面,当工作流正在等待的下一个非顺序的用户消息的其他数据流的发送时,将继续下去。
2根据所发现的路径MTU(最大传输单元)的大小的用户数据切片
为了确保一致的SCTP报文发送到较低的路径MTU,SCTP用户消息分得一杯羹。传递给上部SCTP用户在接收端,切片重组。
3选择性确认(SACK)和拥塞控制
选择性确认数据包丢失,TCP序列号被返回给发送者已经成功地接收到的数据字节的序列号(不包括根据确认的字节数)的认可,并在SCTP反馈给发件人丢失,并要求序列号的消息重发。
SCTP使用的TCP拥塞控制技术,包括慢启动,拥塞避免和快速重传。因此,当一个共存和TCP应用程序时,SCTP的应用程序可以接收部分SCTP的网络资源。
4块(块)结合。
选择性地绑定到??SCTP包,即多个用户消息的消息发送到一个或多个数据结构的SCTP - “块”,SCTP储备应用程序消息传递框架边界。不同类型的块可以绑定到一个SCTP报文,但任何一个数据块之前,必须放在控制块。
5路径管理
SCTP路径管理功能主要是负责为目的地的运输提供了一个选择的目标地址的传输地址的远程地址,它是基于两个方面:SCTP用户的说明和合格的目的地。当其他流量控制不能提供可达性信息,定期扫描路径管理功能链接到SCTP报告在远程传输地址发生变化的可达性。 SCTP路径管理功能模块还负责建立链接,该报告的末端的本地地址,传输地址告诉SCTP用户的远程回报。
6,支持多归位
当SCTP传输的数据包的目的IP地址,如果IP地址是不可达的,SCTP消息重新路由到备用的IP地址。因此,在相关联,即使在两端的,可以容忍网络级别的错误的一端。
7对拒绝服务攻击(DoS)
DoS攻击的方法有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的资源,从而使合法用户无法得到服务的响应。 SYN洪水攻击是一种拒绝服务攻击实例,是最好的方式了黑客攻击。针对SYN Flooding攻击的目标主机上,SCTP关联的初始化阶段,实施以“Cookie”的安全机制。
8支持多种传输模式
严格有序转移(如TCP)的有序转移(如每流)和无序传输(如UDP)的一部分。
2 SCTP报文结构
SCTP分组结构的数据分组,第一部分可以遵循由可变长度的数据块中的一个或多个。块类型 - 长度 - 值(TLV)格式。源端口,目的端口,校验的意义是与TCP类似的意义。确认标签保存价值的交流,第一次在SCTP握手初始标签。如果任何SCTP报文不包括联想这样的标签,当到达的时间将是在接收端丢弃。
包含的块类型,标记的转让处理,在每个块中的块长度,TLV。不同的块类型,可用于发送控制信息或数据。
发送序列号(TSN)和流序列号(SSN)是两个不同的序列号,TSN,以确保可靠性整个关联的SSN保证整个流的有序性,因此,在发送的数据的可靠性订货区分开来。
3 SCTP数据传输
4.1 SCTP四次握手的原则,抵制SYN洪水攻击
SCTP关联定义为:主机A的IP地址] + [主机的端口] + [IP地址的主机B] + [B主机端口。因此,相应的组的每个端部中的IP地址的任何一个可以是标记相关的,通过四向握手,作为相应的源/目的地地址和结束SCTP主机交换通信状态。
SYN洪水利用所固有的脆弱性,TCP / IP,TCP三次握手面向连接的SYN洪水的存在基础。 SYN Flooding攻击原理是:大量的恶意攻击者向服务器发送一个SYN包,服务器发出一个SYN + ACK数据包无法收到客户端的ACK包(第三次握手无法完成),服务器端将保持一个非常大名单的半连接,消耗大量的CPU时间和内存资源,也能保持此列表中的IP SYN + ACK的重试。服务器端将忙于处理攻击者伪造的TCP连接请求以及没有时间忽略正常的客户请求,从正常的客户的角度来看,服务器失去了响应。
在SCTP四次握手的INIT消息,接收端不保存任何状态信息或分配的任何资源,这样你就可以防止DoS攻击,如SYN洪水。 INIT-ACK消息发送,使用了一种机制 - “状态曲奇”的cookie的发送者建立自己的国家所需的全部信息。
SCTP产生一个Cookie状态过程如下:
1。收到的INIT发出的INIT ACK数据块的信息来创建一个关联的TCB(传输控制块)。
在TCB中,生存在协议参数设置为“有效的Cookie时间,创建日期设置为当前日期。
3根据TCB收集重建的TCB所需的最小的子集的信息,这个子集和密钥来产生一个MAC(消息认证码)。
用最小的子集的信息和MAC产生状态Cookie。
5。在发送的INIT ACK(含状态cookie参数),发送者必须删除TCB,以及任何相关的新的关联的本地资源。
INIT和INIT ACK必须包含建立初始状态所需的参数:一组IP地址,以确保可靠的传输的初始TSN,每一个收到的SCTP包中必须包含初始标签,每一端的请求发出的数据流的数量并在每一端可以支持接收的数据流的数量。交换这些消息,INIT COOKIE-ECHO消息的发送者被送回的状态Cookie。接收端在接收COOKIE-ECHO饼干的状态,完成重建自己的国家和回送COOKIE-ACK确认该协会已成立。 COOKIE-ECHO和COOKIE-ACK的用户数据信息可以绑定到每个包。
因此,使用上述的以这样的方式,即使接收INIT消息,接收终端,也没有任何的资源消耗:它既不分配任何系统资源,并且不保存的新的关联的状态,它是只对口援建的状态状态的Cookie作为一个参数,它包含每一个回送的INIT-ACK消息,并最终状态cookie COOKIE-ECHO消息发送回。
2.2 SCTP的数据交换
正常的两个SCTP主机之间的数据交换。 SCTP主机发送SACK块,用来确认每一个收到的SCTP报文。 SACK的完全描述的接收侧的状态,可以使发送侧决定的重发,因此,在根据对SACK。 SCTP支持TCP快速重传和超时重传算法类似。
SCTP和TCP数据包丢失,使用不同的机制:TCP序列号空缺已被填补缺口,直到收到,发送丢失的数据包数据的序列号是高于之前。但是,SCTP即使收到订单的序列号空缺,并会不断发回数据。
3.3 SCTP关联关闭
面向连接的传输协议,SCTP还可以使用与TCP的三次握手关闭相关,但有一点不同:在“关联关闭”的过程中保持连接打开一个TCP终端,新的数据来自对等体,但不支持TCP SCTP这个“半封闭”状态。 1日发布由主机A“OFF”(关闭)块终止与主机B,主机A就会进入“SHUTDOWN-PENDING”状态,相应的动作是:不再接受上层应用的数据,并且只发送队列中剩余的数据,进入“SHUTDOWN-SENT”状态。
一旦主机B接收到“OFF”挡,进入“SHUTDOWN-RECEIVED”状态,与主机A,不再接受上层应用的数据,只发送队列中剩余的数据。
主机A再发送“关闭”块,剩余的数据已经达到主机B发出的通知,并重申,该协会正在关闭。
当第二个获得“关闭”块,主机B发送确认关闭“块。
随后的主机发送“关闭”结束“块完成关闭的关联。
4结论
SCTP是开发用于传输信令流量,但它有一定的优势,先进的TCP协议机制,如选择性确认,快速重传,无序提交,因此,它也满足高性能传输的需求,这将赋予它更广泛的应用的要求。目前,有各种各样的操作系统都支持SCTP,如Linux,AIX和Solaris上,Windows中,FressBSD。不同的协议之间的互操作性测试取得成功,揭示了SCTP正走向商业产品的道路。
IEFT致力于SCTP进一步的,以使其更好地满足下一代应用的需求,如支持IPv6地址,解决对端的IPv6站点本地和链路本地地址不连接的问题,以及在现有的关联动态添加或删除IP地址,而无需重新启动关联。
此外,在第三代移动通信,SCTP信令承载层的选择之一,它的应用及其性能评价是还待研究。
参考文献:
‘玖’ 给出一个C++或Java编写的ftp服务器程序
Socket TCP
反射API介绍
4.Java Socket编程 TCP 协议编程
1) TCP工作模型: 先找
堂(主机/IP), 到食堂以后找窗口
(Socket/套接字 端口号), 服务员等待连接,客户向服务仔知兆员发起连接
连接以后, 一个窗口可以为每个客户安排一个服务员(线程)提供服务,
每个服务过程可以双向交流通讯(流), 通讯完成后要关闭连接.
5. TCP 服务端编程(食堂)(java.io.*,java.net.*,java.lang.*)
1) 创建ServerSocket实例绑定一个服务端口(Socket/套接字 端口号)
2) 开始ServerSocket实例 的监听, 等待客户端的连接
3) 如果有客户连接进来, 就获得了客户的套接字(Socket)实例
客户的套接字(Socket)实例中包念租括与客户端建立的连接流
4) 为这个客户(Socket) 创建一个服务线程, 提供服务(run方法)
5) 继续等待下一个连接, 返回到2)
6) 服务线程 完成通讯服务过程
7) 端口号: 0~65535, 1K以下留给系统使用
6. TCP 客户端编程
1) 创建Socket 实例, 连接到服务器端, 成功创建猛贺s就表示连接到了
服务器
Socket s = new Socket("host", port)
2) 客户端 Socket 与服务器端 Socket 对应, 都包含输入, 输出流
客户端的s.getInputStream() 连接于服务器s.getOutputStream()
客户端的s.getOutputStream()连接于服务器s.getInputStream()
3) 使用线程处理 网络流
7. Java 反射
1) 反射是Java自我管理(类, 对象)的机制
2) * 可以通过反射机制发现对象的类型 发现类型的方法/属性/构造器
3) * Java 反射 可以创建对象 并 访问任意对象方法和属性等
4) Class 加载
类加载到内存: java 将磁盘类文件加载到内存中,为一个对象(实例)
这个对象是Class的实例, 也就是 这些对象都是Class实例
5)Class 实例代表Java中类型, 基本类型的类型: int.class, long.class
类类型 Class 实例获得如下:
Class cls = String.class;
Class cls = Class.forName("java.lang.String");
Class cls = "abc".getClass();
以上方法获得cls 是同一个对象, 就是String 类内存加载的结果
package javase2.day06.ftp;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* ftp 客户端 可以使用命令 ls pwd get
*/
public class FtpClient {
public static void main(String[] args)
throws IOException{
FtpClient client = new FtpClient();
client.open();
}
public void open() throws IOException{
Socket s = new Socket("localhost", 9000);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
//处理客户端对服务器的请求
new RequestProcess(out).start();
//处理服务器的反馈信息
new ResponseProcess(in).start();
}
//处理客户端对服务器的请求
class RequestProcess extends Thread{
OutputStream out;
public RequestProcess(OutputStream out) {
this.out = out;
}
public void run() {
try{
Scanner sc = new Scanner(System.in);
while(true){
String s = sc.nextLine();
IOUtils.println(out, s);
if(s.equals("bye")){
System.exit(0);
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
class ResponseProcess extends Thread{
InputStream in;
public ResponseProcess(InputStream in) {
this.in = in;
}
public void run() {
try{
while(true){
String header = IOUtils.readLine(in);
if(header.startsWith("text,")){
show(header,in);
}else if(header.startsWith("file,")){
save(header, in);
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public void show(String header, InputStream in)
throws IOException {
int n = Integer.parseInt(header.split(",")[1]);
for(int i=0; i<n; i++){
String s = IOUtils.readLine(in);
System.out.println(s);
}
}
public void save(String header, InputStream in)
throws IOException{
File dir = new File("ftp");
if(!dir.exists()){
dir.mkdir();
}
//header: file,10,filename
String[] data = header.split(",");
long length = Long.parseLong(data[1]);
String filename = data[2];
File file = new File(dir, filename);
BufferedOutputStream out =
new BufferedOutputStream(
new FileOutputStream(file));
for(long i=0; i<length; i++){
int b = in.read();
out.write(b);
}
out.close();
}
}
package javase2.day06.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 模拟FTP服务器, 支持命令pwd,ls,get file
*
* 协议: type,length,value TLV格式
*
* 文本: text,5\nline1\nline2\nline3\nline4\nline5\n
* 文件: file,4,filename\n 41 42 43 44
*
* text,5\nline1\nline2\nline3\nline4\nline5\nfile,4,filename\n 41 42 43 44
*/
public class FtpServer {
public static void main(String[] args)
throws IOException{
FtpServer server = new FtpServer();
server.start();
}
public void start() throws IOException{
ServerSocket ss = new ServerSocket(9000);
while(true){
Socket s = ss.accept();
new Agent(s).start();
}
}
class Agent extends Thread{
Socket s;
public Agent(Socket s) {
this.s = s;
}
public void run() {
try{
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
//向客户端发送, 先发协议头,再发送文本行
out.write("text,1\n".getBytes());//协议头
//发送消息内容, 一行文本消息
out.write("欢迎使用FTP演示服务器!\n".getBytes());
out.flush();
while(true){
//读取客户端发送到命令
String cmd = IOUtils.readLine(in).trim();
if("pwd".equals(cmd)){//显示当前目录
pwd(out);
}else if("ls".equals(cmd)){
ls(out);
}else if(cmd.startsWith("get ")){
get(cmd, out);
}else if("bye".equalsIgnoreCase(cmd)){
IOUtils.println(out, "text,1");
IOUtils.println(out, "Bye, Bye!");
s.close();
}else{
out.write("text,1\n".getBytes());//协议头
out.write("只支持pwd,ls,get,bye!\n".getBytes());
out.flush();
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public void pwd(OutputStream out)
throws IOException{
File dir = new File(".");
IOUtils.println(out, "text,1");
IOUtils.println(out, dir.getCanonicalPath());
}
public void ls(OutputStream out)
throws IOException{
File dir = new File(".");
File[] files = dir.listFiles();
IOUtils.println(out, "text,"+files.length);
for (File f : files) {
if(f.isDirectory()){
IOUtils.println(out, "["+f.getName()+"]");
}else{
IOUtils.println(out, f.getName());
}
}
}
public void get(String cmd, OutputStream out)
throws IOException{
//cmd="get filename"
String name = cmd.split("\\s+")[1];
File file = new File(name);
if(! file.exists()){
IOUtils.println(out, "text,1");
IOUtils.println(out, "没有文件呀!"+name);
return;
}
//文件协议头:
IOUtils.println(out,
"file,"+file.length()+","+name);
FileInputStream in =
new FileInputStream(file);
IOUtils.cp(in, out);
out.flush();
in.close();
IOUtils.println(out, "text,1");
IOUtils.println(out, "发送成功:"+name);
}
}
‘拾’ 一次WebSphere类加载问题的错误诊断
开发人员使用开源项目在Tomcat上进行开发 然后在生产环境中使用WebSphere应用服务器 target=_blank>服务器(WAS)部署时 有时会遇到在Tomcat上开发的应用在WAS上不能运行的情况 其中相当一部分错误是因为类加载的问题 有一次接到用户电话 反映使用JSF开发的应用 在WAS上不能正常运行 到用户现场 发现开发人员使用myfaces开皮野前源项目在tomcat上进行开发 部署到WAS上时 页面不能正常显示 检查WAS日志SystemOut log和SystemErr log以及应用自身的日志 没有发现有意义的信息 遇到此类问题时 如果对开源项目或 应用内部运行机制不太了解 可以大致按下列思路进行错误诊断.首先先尝试更改应用的类加载路径
WAS的类加载原理请参见后面列出的参燃清考资料
如果是xxx war应用 在部署到WAS后 登陆WAS管理控制台 选择应用程序/xxx_war应用 选择 管理模块 选择相应的 war模块 默认的类装入器顺序为 类已装入并且是先使用父类装入器 更改 类装入器顺序 为 类已装入并且是先使用应用程序类装入器
如下图
src= //img ecity cn/img_ / / / jpg >
如果安装的应用是xxx ear应用 特别是有一些公用的utility jar位于ear级别 则除了按照上面步骤更改war模块(也称为web模块)的类装入器顺序之外 还要更改ear级别的类装入器顺序 选择应用程序/xxx应用 选择 类装入和更新检测 选择 类已装入并且是先使用应用程序类装入器 如下图
src= //img ecity cn/img_ / / / jpg >
src= //img ecity cn/img_ / / / jpg >
重启应用 必要时重启WAS 测试页面是否正常显示
.如果还是不能正常显示 则查看应用特别是开源项目使用的utility jar包 通常位于ear目录级别 或者xxx war/WEB INF/lib目录下 删除掉一些常见的WAS已有的且必须使用WAS自带的jar包 如j ee jar 支持JSP等运行的jar等(此类问题SystemOut log或者SystemErr log中通常会报错) 如果自己无法判断 则略过此步 本次错误诊断中 检查客户应用 发现WEB INF/lib目录中jar包数量众多 且客户除了使用myfaces 还有其他大量开源项目 不能明确断定有问题的与WAS冲突的jar包
.到/support以及google 上搜索关键字JSF myfaces WebSphere 得到一些建议
Apache Tomahawk configuration error with Apache MyFaces and WebSphere Application Server and :
_US&cs=utf &cc=us&lang=en
Using MyFaces JSF and WebSphere Application Server V and V :
_US&cs=utf &cc=us&lang=en
sitemesh myfaces richfaces的集成解决方案
按照搜到的建议操作 页面仍无法显示 为了分离错误 缩小诊断范围 进行第 步
.到myfaces项目网站 下载与客户应用同一版本的最简单的sample应用myfaces example simple war 在WAS上安装进行测试 页面无法显示 进行第 步更改脊拿类加载路径也无法显示 检查myfaces example simple war的lib目录 删除掉xml apis b jar和xmlParserAPIs jar包 运行成功
.回到客户应用 删除掉xml apis b jar和xmlParserAPIs jar 更改类加载路径 页面正常显示
.如果实际诊断中 能够明确断定是某个类的加载出了问题 可以打开 详细类装入 选择 应用程序服务器/server /进程定义/Java虚拟机 选择 详细类装入 如下图
src= //img ecity cn/img_ / / / jpg >
重启WAS之后 在native_stderr log中 可以看到类的加载信息 例如
class load: apache taglibs standard tlv JstlBaseTLV from: file:/D:/Program/was /AppServer/profiles/TestProfile/installedApps/wdanNode Cell/myfaces example simple _ _ _war ear/myfaces example simple war/WEB INF/lib/jstl jar如果还需要类加载的更详细信息 可以在诊断跟踪中设置 *=info: ibm ws classloader *=all 具体做法为 登陆管理控制台 左边导航树选择 故障诊断/日志和跟踪 然后在右面区域选择进程名(单机环境通常为server )/诊断跟踪 然后选择 更改日志详细信息级别 设置 *=info: ibm ws classloader *=all 保存
src= //img ecity cn/img_ / / / jpg >
src= //img ecity cn/img_ / / / jpg >
重启WAS 在profile_root/logs/server /trace log中 就可以看到类加载的详细信息 例如
>loadClass name=llaborator PortletServletCollaborator … ibm ws classloader CompoundClassLoader@ f f Local ClassPath: D:Programwas AppServersystemAppsisclite earstruts jar; … Delegation Mode: PARENT_FIRST [ : : : CST] a CompoundClass <loadClass Exit lishixin/Article/program/Java/hx/201311/27106