ssh: connect to host localhost port 22: Connection refused

一般错误信息为:ssh: connect to host localhost port 22: Connection refused

这种错误很主要的一个原因是sshd服务没有启动,先启动sshd服务后就没有问题了。

启动sshd服务:重启ssh: /etc/init.d/ssh start  (前提条件是你已安装过ssh了)

或者防火墙阻止了sshd服务

Android删除短信的方法

1.删除短信的函数,一条一条的删除所有短信

	/* 	 * Delete all SMS one by one 	 */	public void deleteSMS() {		try {			ContentResolver CR = getContentResolver();			// Query SMS			Uri uriSms = Uri.parse("content://sms/sent");			Cursor c = CR.query(uriSms,					new String[] { "_id", "thread_id" }, null, null, null);			if (null != c && c.moveToFirst()) {				do {					// Delete SMS					long threadId = c.getLong(1);					CR.delete(Uri.parse("content://sms/conversations/" + threadId),							null, null);					Log.d("deleteSMS", "threadId:: "+threadId);				} while (c.moveToNext());			}		} catch (Exception e) {			// TODO: handle exception			Log.d("deleteSMS", "Exception:: " + e);		}	}

2.在AndroidManifest.xml中增加读取短信的权限

<uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.WRITE_SMS" />

android 中管理短信

以前在华为的时候对彩信进行过研究,这几天在搞短信的东西,因为以前的东西不能带出来,所以去google了下,收藏下

偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中。

公开的SDK中没有这个类,不能直接使用。于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常。

看来不能为所欲为了,不过据网上资料介绍可以拷贝db文件来实现短信数据备份。

既然每个db跟package名相关,建立了一个package为com.android.providers.telephony的工程去试一试,看看能不能成功。

结果输出Please execute 'adb uninstall com.android.providers.telephony' in a shell,android的安全做得很强大啊。


不能直接访问数据库,只能通过协议来访问数据库了,       
先贴出相关的协议:       
content://sms/inbox        收件箱
content://sms/sent        已发送
content://sms/draft        草稿
content://sms/outbox        发件箱
content://sms/failed        发送失败
content://sms/queued        待发送列表

在模拟器上Outbox没有查询到数据,在模拟器上找了老半天也没找到发件箱,很郁闷。   
数据库中sms相关的字段如下:   
_id               一个自增字段,从1开始
thread_id    序号,同一发信人的id相同
address      发件人手机号码
person        联系人列表里的序号,陌生人为null
date            发件日期
protocol      协议,分为: 0 SMS_RPOTO, 1 MMS_PROTO 
read           是否阅读 0未读, 1已读 
status         状态 -1接收,0 complete, 64 pending, 128 failed
type
    ALL    = 0;
    INBOX  = 1;
    SENT   = 2;
    DRAFT  = 3;
    OUTBOX = 4;
    FAILED = 5;
    QUEUED = 6;

body                     短信内容
service_center     短信服务中心号码编号
subject                  短信的主题
reply_path_present     TP-Reply-Path
locked

检索数据方法很简单:  

Uri uri = Uri.parse("content://sms/inbox");        
Cursor cur = this.managedQuery(uri, null, null, null, null);        
if (cur.moveToFirst()) {        
    do{    
    for(int j = 0; j < cur.getColumnCount(); j++){    
            info = "name:" + cur.getColumnName(j) + "=" + cur.getString(j);
            Log.i("====>", info);
        }
    }while(cur.moveToNext());     
}

managedQuery最终也要将参数转换为SQL语句向SQLite发送消息,因此参数跟SQL语句很类似,所以可以在查询字段中加入SQL函数,

比如new String[] projection = new String[]{"count(*) as count"}等等。      
managedQuery中的参数依次为uri,       
查询字段          查询字段数组,也可以将所有需要查询的字段放入一个字符内   
                      比如new projection[]{"_id", "thread_id"}和new projection[]{"_id,thread_id"}是一致的。   
                      跟SQL一样,字段名不区分大小写   
条件                不带Where的SQL 条件字符,如果有参数则用?替代,比如"_id=? And thread_id = ? Or type = '1'"   
条件中的参数   参数字符数组,跟上述的条件一一对应   
排序                不带Order by排序字符串,比如_id desc, type   
如果参数为null,SQL中查询字段为“*”,相关的条件为空白

还可以用getContentResolver()获得一个ContentResolver,   
getContentResolver().query()同样返回一个Cursor对象,参数跟managedQuery一致。   
不过用ContentResolver对象去更新、删除和插入一条数据时报SecurityException。看来没有权限,在Manifest.xml中加入权限:
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
然后删除短信:
this.getContentResolver().delete(Uri.parse("content://sms"), "_id=?", new String[]{"3"});
删除成功。


Url中content://sms 替换成content://sms/ 也成功,但是其它url时程序报错,比如content://sms/inbox

看了一下android的源代码,sms支持的协议有:

sURLMatcher.addURI("sms", null, SMS_ALL);
sURLMatcher.addURI("sms", "#", SMS_ALL_ID);
sURLMatcher.addURI("sms", "inbox", SMS_INBOX);
sURLMatcher.addURI("sms", "inbox/#", SMS_INBOX_ID);
sURLMatcher.addURI("sms", "sent", SMS_SENT);
sURLMatcher.addURI("sms", "sent/#", SMS_SENT_ID);
sURLMatcher.addURI("sms", "draft", SMS_DRAFT);
sURLMatcher.addURI("sms", "draft/#", SMS_DRAFT_ID);
sURLMatcher.addURI("sms", "outbox", SMS_OUTBOX);
sURLMatcher.addURI("sms", "outbox/#", SMS_OUTBOX_ID);
sURLMatcher.addURI("sms", "undelivered", SMS_UNDELIVERED);
sURLMatcher.addURI("sms", "failed", SMS_FAILED);
sURLMatcher.addURI("sms", "failed/#", SMS_FAILED_ID);
sURLMatcher.addURI("sms", "queued", SMS_QUEUED);
sURLMatcher.addURI("sms", "conversations", SMS_CONVERS
ATIONS);
sURLMatcher.addURI("sms", "conversations/*", SMS_CONVERSATIONS_ID);
sURLMatcher.addURI("sms", "raw", SMS_RAW_MESSAGE);
sURLMatcher.addURI("sms", "attachments", SMS_ATTACHMENT);
sURLMatcher.addURI("sms", "attachments/#", SMS_ATTACHMENT_ID);
sURLMatcher.addURI("sms", "threadID", SMS_NEW_THREAD_ID);
sURLMatcher.addURI("sms", "threadID/*", SMS_QUERY_THREAD_ID);
sURLMatcher.addURI("sms", "status/#", SMS_STATUS_ID);
sURLMatcher.addURI("sms", "sr_pending", SMS_STATUS_PENDING);
sURLMatcher.addURI("sms", "sim", SMS_ALL_SIM);
sURLMatcher.addURI("sms", "sim/#", SMS_SIM);


其中,delete方法中支持的协议为:

SMS_ALL               根据参数中的条件删除sms表数据
SMS_ALL_ID         根据_id删除sms表数据
SMS_CONVERSATIONS_ID     根据thread_id删除sms表数据,可以带其它条件
SMS_RAW_MESSAGE              根据参数中的条件删除 raw表
SMS_STATUS_PENDING         根据参数中的条件删除 sr_pending表
SMS_SIM                                 从Sim卡上删除数据

试一下SMS_CONVERSATIONS_ID:"content://sms/conversations/3 ",删除thread_id="3", _id="5"的数据       
在eclipse中的Emulator Control中,以13800给模拟器发送三条数据,然后以13900发送一条       
this.getContentResolver().delete(Uri.parse("content://sms/conversations/3"), "_id=?", new String[]{"5"}); 
成功删除一条数据。   

在数据库中每个发送者的thread_id虽然一样,但不是固定的,如果把一个发送者的全部数据删除掉,       
然后换一个新号码发送短信时,thread_id是以数据库中最大的id+1赋值的。   


update支持的协议有很多:

SMS_RAW_MESSAGE   
SMS_STATUS_PENDING   
SMS_ALL   
SMS_FAILED   
SMS_QUEUED   
SMS_INBOX   
SMS_SENT   
SMS_DRAFT   
SMS_OUTBOX   
SMS_CONVERSATIONS   
SMS_ALL_ID   
SMS_INBOX_ID   
SMS_FAILED_ID   
SMS_SENT_ID   
SMS_DRAFT_ID   
SMS_OUTBOX_ID   
SMS_CONVERSATIONS_ID   
SMS_STATUS_ID

以SMS_INBOX_ID测试一下:   
ContentValues cv = new ContentValues();   
cv.put("thread_id", "2");   
cv.put("address", "00000");   
cv.put("person", "11");   
cv.put("date", "11111111");   
this.getContentResolver().update(Uri.parse("content://sms/inbox/4"), cv, null, null);   
太强了,连thread_id都可以修改。   


insert支持的协议:

SMS_ALL   
SMS_INBOX   
SMS_FAILED   
SMS_QUEUED   
SMS_SENT   
SMS_DRAFT   
SMS_OUTBOX   
SMS_RAW_MESSAGE   
SMS_STATUS_PENDING   
SMS_ATTACHMENT   
SMS_NEW_THREAD_ID 

向sms表插入数据时,type是根据协议来自动设置,   
如果传入的数据中没有设置date时,自动设置为当前系统时间;非SMS_INBOX协议时,read标志设置为1   
SMS_INBOX协议时,系统会自动查询并设置PERSON   
threadId为null或者0时,系统也会自动设置   

一直为造不了"发送失败"的邮件而发愁,现在来做一个:   
content://sms/failed   

ContentValues cv = new ContentValues();   
cv.put("_id", "99");   
cv.put("thread_id", "0");   
cv.put("address", "9999");   
cv.put("person", "888");   
cv.put("date", "9999");
cv.put("protocol", "0");
cv.put("read", "1");
cv.put("status", "-1");
//cv.put("type", "0");
cv.put("body", "@@@@@@@@@");
this.getContentResolver().insert(Uri.parse("content://sms/failed"), cv);
type被设置成了5,thread_id设置为1


系统连最起码的数据校验都没有做啊,google对程序员也太仁慈了。

看看能不能再挖掘一下sms的功能。先来做一个错误的查询:

getContentResolver().query( Uri.parse("content://sms/") , new String[]{"a"}, "b", null, null);

log输出错误的SQL语句:

SELECT a FROM sms WHERE (b) ORDER BY date DESC

query方法中没有Group by,如果想对短信做统计,对Cursor进行遍历再统计也太慢了。

在SQL语言中group by在Where后面,那就在条件参数中想想办法:

Android组织SQL语句时将条件两端加(),那就拼一个group by出来吧:

getContentResolver().query( Uri.parse("content://sms/") , new String[]{"count(*) as count, thread_id"}, "1=1) group by (thread_id", null, null);

那么输出的SQL= SELECT count(*) as count, thread_id FROM sms WHERE ( 1=1) group by (thread_id ) ORDER BY date DESC

如果想查询URI没有对应的表怎么办呢,比如想知道 mmssms.db数据库中有哪些表,

查询的表是URI定的,再在条件参数中拼凑肯定是不行。

那我们把目光往前移,看看在字段参数中能不能凑出来。

要查询其它表,关键要去掉系统固定添加的FROM sms,

用用SQL中的注释吧,

getContentResolver().query(Uri.parse("content://sms/"), new String[]{" * from sqlite_master WHERE type = 'table' -- "}, null, null, null);

那么输出的SQL=SELECT * from sqlite_master WHERE type = 'table' -- FROM sms ORDER BY date DESC

居然能够运行。

得寸进尺,再进一步,如果加入“;”也能运行的话,哈哈,那么建表、删除表、更新表也能为所欲为咯。

getContentResolver().query(Uri.parse("content://sms/"), new String[]{" * from sms;select * from thrreads;-- "}, null, null, null);

很可惜,只运行了第一条SQL语句,看来在关键问题上,android还是有所控制的。

不过支持--也很不错了,这样可以查询数据库中所有的表,而且还可以多表联查

2005年8月19号

2005年8月19号是我人生的一重大转折点,

从此人生被推翻了重写,然后又重构。

老爸说你就认命吧,所以继承了所有的本性;

老妈说要保重身体,所以有了一条原则,尽量少做对自己身体无益的事;

姑父说你经历了这么大的事也懂事多了,所以性格来了个大翻转,重写重写重写。

8月19号以后,学习成绩不再是大家讨论的话题,高考成绩更不能谈,虽然过了一年后,某些亲戚说要是不出事,也应该是个好大学吧,要是补习也应该是一个好大学了吧。一切已不重要了。

8月19号以后,我一个人面对了很多东西,开始觉得是不是有存在的意义。那时很多同学陪我聊天散心,周末就来看我。老师也不再过问我的成绩,叫我好好休息。那时候高考好像都与我无关。

8月19号以后,我的日常工作就是起来去医院,一个上午就没了,下午去看看书,晚上睡觉,差不多一年的时候,就这样过着。有时很想哭,但坚持着,我不想看着爸妈悲痛,也不想看同学为我伤心。记得一次大家哭的成人样了。记得一次治疗回来,我已面目全非了,某某些同学看着都心痛着,一直在安慰我,痛不痛。我说习惯了,一切皆已习惯。

8月19号以后,我很少笑了,至少很少在陌生人面前笑了。当大家都知道我发生了什么,我就可以放心的笑了。虽然笑的不是那么好看,但我真的很想像大家一样笑的那么自然。记得有时我对着镜子练习笑,但不管怎么样,我的心一直在开心的笑。快乐才是重要的。

6年了,每年的今天,我都会想起我的家人,一切支持着我,叫我不要放弃;也真正的懂得来自家人的家。还有我那些同学,那些老师,一直鼓舞着我。特别一些可爱的同学,在这就不点名了,有你们,我很高兴。谢谢家人与同学,还有老师们。谢谢。

北漂一年暨毕业了

  最近总想写点什么,却找不到适合的理由去动手写。每次登陆后台,又关掉,然后再登陆,写了个开头,最后还是没有保存,直接退了。也许我真的没有什么好写,还是不写点吧。

今天也找到了一个理由来写写,回忆下过去,回忆下大学,回忆下北漂的日子,回忆下毕业,还有那些同学和我思念的同学,思念那我亲爱的人。时间匆匆,昔日的斯人已不在鸟。

2010年7月10是晚上10点,告别上海的同学,跨上了开往北京的列车。从此沪漂变为北漂,开始新的生活,新的学习。记得去上海的列车上一个小朋友说我不太成熟,我叫他猜我多大。最后差了两岁,也许那时我还真年青。在上海火车站,一个人拖着很多的东西,被人看了很多次,被当成民工进城了。11号下午到达北京,开始没人来接,最后被硬拉了一个人来接我。初到北京,发现地铁老破老破的,地铁站也老破,人也蛮多的。在老谭的安排下,跟老谭住有一起,从此过着水生火热的生活。北京4+7的生活开始鸟。。。。。

6月12号,结束了北京的工作,回到学校,以毕业为借口,以感情为借口,以证书为借口,辞去了工作。虽然老大很不情愿的放我走,但最后还是走了。因为最后我还是要走,这么一次充分的借口面前再不走,以后要走就真的不好意思走了,也对不起人家。走吧,想好了走吧,死定的走了。走之前,同事说他们会想我的,我说我也会想你们的。再离开北京没几天,同事就叫我回去,说没有我的日子,办公室很无聊,很没有生气,不好玩了。大家已习惯办公室天天有个吵吵闹闹的我了,一走清静多了,开始有点不习惯了吧。有些人只是生命中的过客,总会离开的。也许以后还会联系,也许再也见不到了。

毕业了,要离开同学了,相处多年的同学,也因为毕业而分离。大家要去为他们的生活而奋斗,去面对真正的现实。再也没有以大学生自居的借口了,生活就是生活。

东华理工大学07软件4班,南区6栋432,这些将再一次写入我的生命中,将成为美好的回忆。

再见了,大学;再见了,同学;再见了,朋友

离群之雁,为了远方的梦

昨天完成了辞职,虽然老大放我了,但公司是否放我,已不得而知了。我已决定走了,将不会回来了。决定很痛苦,放弃比一般工作还高点的工资,但想想几个月后还是会走,也算对得起未来的公司吧。

回想在华为日子,学到了很多,很多做人做事的东西。虽然技术提升没有想像的那么高,但提高还是有的。感谢张老大的培养,虽然很多次伤了老大的心,心里还是很内疚的。

明天我将离开北京,回到南昌;像一只离群的雁,有些不知所措,有些迷茫。但离群的雁也可能是笨鸟先飞,也许我就是这样一只笨鸟,为了远方的梦,只是一个梦,而努力。

再见了,北京。

--------------------------------------------------------------------------------

本来今天去找边的,后来撞着同事Zengjing同学,一起在那聊的很开心,聊到了凌晨才散了。一起合作搞U8180,大家都很了解。也解了我很多心结,也许我经历的太少,而他的很多东西正是我所需要的。真诚去相信一个人,爱就爱的自由。放心去做自己想做的事,事业很重要。

感谢华为终端数据业务小分队的同学们与我共度了最后的大学,谢谢。

感谢东华理工的北京同学们一起在北京奋斗,谢谢。

感谢远方的同学与朋友,相互关怀着,谢谢。

感谢小边,一直一直。。。。。谢谢

散伙了

散伙了,就这样我们散伙了

再见了,爱人

祝你来北京一周年

做着作着就累了

记得这个月答辩完了,毕业的事也接踵而至。本以为自己要以好好的过掉这么月,然后回南昌,就这样子,好好的。一切都想的很好,但事情总出乎我的想像。有些来的太快,有些等了很久,却不见踪影。很多事很无奈,很多事很无语,很多事很无聊,很多事很无情,很多事很无法回首。

向老大提了辞职,

老大说“好好想想吧,你决定去哪?”

“去深圳”

“去深圳干什么”

“妞要去深圳了,我也去”

“他去深圳干什么 ”

“他有姐在深圳”

“你去干什么呢”

“我去那玩下”

“你真的想好去深圳,在深圳跟在北京不是一样吗”

“我还是去深圳吧,我总会要走的”

“你想好,你还是好好考虑下,别老换工作,对你以后不好”

“先去看看再说吧”

“好吧,你想什么时候走”

“越快越好吧”

“好吧,送走你U8180,你再走吧”

“好吧”

就这样,我完成了辞职的前奏。我不知道我真的会回来吗?真的会回来吗。同事说我在华为的发展会很好的,很有前途的。也许吧,我应该走了,虽然我找了一个妞要去深圳的借口,但我害怕的东西我自己知道的。

这几天累了,工作不累,心越累了。也许要毕业了,大家都累了。就这样吧,再见

远程奔袭

离上次写博客已经好久了,这段时间真的太忙了,也很累。不只是身体上比较累,心感觉更累。有一部分来自己工作上的,大部分是来自情感上的。自从过年回来,一直没有好好的休息。身体也感觉有点支持不上了,所以这段时间一直在加强身体上的锻炼。记得17号找小边的时候,那时两天都在搞代码,一直没有下床走动。见小边的时候,都快支持不住了。小边说不喜欢这样的人,也许是对的。不能对自己好的人是不爱自己。别人爱上这样的人,那更不爱他自己。

我的生命发生很多不一样的事情,但最终我还是选择坚持。坚持这一份对她的感情,我知道以后可能真的什么也得不到什么,但我还坚持着,因为一个杯具的背后都有一个美丽的故事,这是我常对别人说的。不管生命中发生什么都要积极的去想,积极的去为别人想,更要积极的为自己去想,为自己的爱人,因为我爱着她。

时间过的很快,一下子就要离开华为北研了,在北京也快一年了。虽然每次有人问我什么时候,我都没说;又问我为什么要走,我都会说北京天气不太好,空气不好,什么什么的。其实这都只是借口吧,真正的原因大家都懂的。记得前几天,我想回家,真想家了。正好小边要回来考试,我直接买票回来了,同事都以为我要走了,都说会想我的,一定要回来。我说会的,然后又编了一个美好的故事。叫做三步让老大放我离开华为,这是第一步,先请假,然后再请假,最后辞职走人。虽然见不到人,但回来还是心情蛮好的,没有工作上的压力,还发工资,我操个蛋,玩还发钱。

12个小时的火车到了南昌,走路去了学校,之后没有睡觉,就把公司的证给办了。因为下午要跑客户又急着去跑,晚上开会,讲下公司怎么搞。之后就睡着了,真的很累,但又睡不着。同学见着了,一起抱抱,兄弟好久不见了。走着走着,不由着想起过去一起走过的路,做过的事。时间让我老了很多,我们之间也少了很多。也许我还没走过来,一直没有走过来。高中同学对我说你是我们班最优秀的人,我最看好你了,为什么不自信呢。不自信不来自事业,不来自己能力,不来自己技术,不自己来自己什么地方,你们都懂的。他们都知道,只是不想提起我那无法走出的故事。一同学创业失败欠了贷款,要卖房还贷,说了很多,很多。我说要努力吧,过去的事得忘记。积极开心就好,也许你们活着,我死了。他们都死了,我却活着。但不管怎么样,都要好好活着,积极开心。

 

今天晚上的火车,离开南昌。虽然会回来,但现在的心情跟以前回来都不一样。因为想的东西更多了,毕业也近了。大学与感情都画上一笔,不管是好还是坏,都要结束些东西。

                                                           记南昌摩尔工作室  2011年4月24日0点30分

----------------------------------------------------分隔线-----------------------------------------------

早上醒来的很早,起的也很早,想得也很多。所谓公司也只是那样,必未想像的那么好,也没想像的那么差。也许要一个过程,虽然我选择追随我的梦想,追随我的小边,这一切不经过很大的打击是不会改变的。我依然只在乎自己的感受。感觉我在找一个离开 的借口,现在没有一个人会或敢去惹我,因为我随时会爆发。一切都跟我安排那样的,虽然很多次都不跟想像的那样,但都一直谋划着。放弃北京了 我会失去很多,回到南昌也许会得到意想不到的,更重要的是我将失去我最重要的但被别人认为不重要的东西。很多东西想像的比我复杂,但有些是我想复杂了。

                                

在路上,我们一路同行

今天下午回到了北京,回到了我的驻地。就这样完成了,过年回家团圆之旅。想想过年买票那是多么的心酸。

某周五的早上,某边一个人去了买票。打了电话才知道,就陪了他一会。但还没等我们排上,就已经没票了,可怜的小边,可怜的回家者。边那天茶不思饭不想的盯着网上的分类信息网站,但总是没赶上。就在我去参加某年会的时候,边某拉上了某人去了排通宵。开始我只想叫他回来,这样买也买不到什么好票的。回家心之切已经让边下定了决心。不管谁叫都不回,没办法,要回家只有排了。一个晚上就在那排着,等着第二天天亮吧,排着了临客,也算可以回家吧!这一夜也不知道怎么就支持下去了。看着小边,心痛来着。然后我就去上班了,是的周六上班,我周末要上班。就这样,白天的状况大家都可以想像出来。

回家的票搞定了,来的票又得去想办法了。打电话叫我同学在家里买,因为要帮同学买,所以整天在打电话。我同事都说你整天都在打电话买票,一周都这样。当然电话费也蛮多的,能回家回来这都是小事。在我同学在家里准备买的时候,却有一个很头痛的时候,就是实名。最后我叫小边问下这里可以买,他去买到了。之后我也去买了,马上叫我同学不要买了。就这样,好多天买票的生活就这样过完了。回一次家真难。

票算是搞定了,回家的路上也不是很容易的。那天提前了三小时去火车站,要知道有多少人,排到外面来了,很多人很多人。绿皮车,人很多,窗户都在行驶路上结冰了。蛮冷的,看着小边心痛。下次,以后都不想这样子了。还好,进江西后就已经很少的人了,就这样二十个小时后,我回到了南昌。也许到了这里应该要结束了,但杯具才开始来着。

本来买了9点半的汽车,三个半小时就能到家。就在回家的路上,司机把我们拉宜春走了一趟,我要回安福。他却拉远了,然后又拉回来,这一来,一个下午就没了。四点才到县城,然后快速的坐上回家的客车。五点后我到家了,我终于到家了。