Wednesday 26 February 2014

大温地区旅游景点排名

Business in Vancouver最近评选了大温哥华地区各旅游景点,根据旅游人数的多少,公布了前二十名最受欢迎的旅游点。松鸡山名列前茅排在第一,温哥华水族馆第二,科学馆、温哥华艺术馆、PNE游乐场等,都榜上有名。
  根据Business in Vancouver的排名,松鸡山(Grouse Mountain Resort)去年吸引了一百二十五万游客,是最受欢迎的旅游景点。松鸡山去年为更多地吸引游客增加了一室外用餐点,另外还建有高尔夫球场、棕熊观望点并更新一些基础设施。
  温哥华水族馆排名在第二,旅客人数也达到1百万,目前,水族馆在不影响游客下,还在扩建其它设施,预计今年竣工。
  第三为卡普兰奴吊桥公园(Capilano Suspension Bridge Park),去年吸引了70万游客;科学馆的游客为47.6万;温哥华艺术馆也吸引游客的眼球,近37万人前往观看,排在第五。
  PNE的游乐场也是游客乐此不疲的场所,去年共有29万游客前去观光游玩。PNE未来25年的庞大开发计划,将打造成都市式的一游乐、休闲等好场所。
  史丹利公园(Stanley Park)微型火车、温哥华交响乐团与温德森植物园,相继排在其后,去年游客高达20多万。
  本拿比村博物馆与旋转木马、海港中心的瞭望台、卑诗大学人类学博物馆等,也成为人们热衷观光旅游点,了解历史、文物、温哥华地理风光等。
  去年,近10万游客参观了女皇公园热带雨林温室(Bloedel Conservatory),排名第16;兰利堡的国家历史遗迹、温哥华博物馆等也非常受欢迎。
- See more at: http://www.bcbay.com/life/travel/newsViewer.php?nid=139286&id=215819#sthash.JzJDEVEC.dpuf

Monday 24 February 2014

利用房子养老 可巧用信用额度

永明金融所做的一份调查报告显示,约四分一加人退休后,会将自己的居所作为主要收入来源。66岁的许先生正是这四分一人里面的其中之一,他将已供完的房子按给银行,拿了条信贷额(Line of credit)﹐他计算过,未来最少10年他和妻子的基本生活不愁。
  许先生说,他早年买下的房子已供满,子女长大成人﹐能独立生活,他觉得他应该享受自己大半生工作取得的一点成果,在投资顾问的建议下,他将值70万元的房子按给银行,取得楼价的60%即42万元信贷额,办理过程中不用调查入息,利息是优惠利率加半厘,利息在他提取贷款时才计算。许先生说,一些银行甚至可以给你房价80%的信贷额。
  贷款非入息不用缴入息税
  他计算过,即使他现时没了工作,因届65岁退休年龄,可从政府的退休金计划(CPP)和补贴中拿到约900多元,然后每月从银行中提取3000元贷款,每月差不多4000元,够他与妻子的基本生活费,将来妻子满65岁,又再有另一个900元,生活就更宽裕。而且这3000元是贷款,不是入息,不用缴入息税,比提用RRSP更好。由于贷款是透过按揭房屋而来,你可以还息不还本,甚至连利息也不还,从信贷额中拿钱去还就是了。
  10年后若信贷额用光而又未死,可把房子卖了,拿回屋价剩下的四成维生,那是28万元。若信贷额未用完就离世,那就立下遗嘱,把余下的钱给子女。由于房子只是按了给银行,不是卖断,所以你仍然拥有居住权而不用付租。
  利用房子养老的方法,除了按了房子向银行取得信贷额外,还有传统的大屋换细屋﹐拿现金差价在手,又或卖了房子,拿取现金然后入住老人院等方法,当然也有人利用逆向抵押贷款方法,但这以主流白人为多,华人少用。
  RBC多美年证券公司副总裁潘启鸿表示﹐对于大部分即将退休的人士来说﹐他们已经供完楼﹐百分之百地拥有了自己房屋的产权﹐有的人就打算利用目前升值的房产。
  「如果他们想利用目前加拿大蓬勃的楼市﹐通常的做法就是卖掉现在居住的大屋﹐改去住较小的房子﹐甚至搬去住柏文。这样不但省去剷雪剪草的维护工作﹐还能从大屋变小屋的差价中得到一笔钱﹐放在银行内生息。虽然目前利率较低﹐得到的利息较少﹐但对退休金多多少少也是一个帮补。」
  但大屋换细屋的方式会令生活质素有所下降。宏达理财亚洲业务总监钟颖辉表示﹐一些老人对自己的房子很喜欢﹐或者所居住的环境方便良好﹐不愿意离开﹐但又不想错过高涨的楼市﹐所就有金融机构提供了另外两种选择。
  正值信用额度 借多少还多少
  「第一种就是房屋正值信用额度(编者按﹕即类近上文许先生的做法)。业主把自己的房产抵押之后﹐获得一个信用限额。在年度支取限额内﹐借贷人随时支取任意数额﹐借多少就还多少﹐很灵活。」
  这个方式还适合那些已经把钱投资到别处﹐缺乏资金週转的人,此种方式的好处是灵活和利率通常较低。
  逆向房屋抵押按估价比例放贷
  第二种方式就是逆向房屋抵押贷款(Reverse mortgage)。金融机构根据贷款人及配偶的年龄﹑房产形式﹑房产的估价等﹐按房产估价的某个比例放贷。贷款人的年纪愈大﹐这个比例就愈高﹐但最高也不会超过50%。
  钟颖辉说:「为什么不超过50%﹖这也很好理解。就算将来楼市下跌﹐房子卖掉之后﹐还是能够偿清贷款。」
  钟颖辉称﹐在目前的银行贷款低息的情况下﹐据保守估计﹐全加拿大目前的房产价值﹐比正常情况下要高出一成﹐有房产泡沫的风险。
- See more at: http://www.bcbay.com/life/finance/newsViewer.php?nid=139259&id=215774#sthash.cEu8H7po.dpuf

中国一线城市房价要跌80%

 看一个城市房价的高低,除了房价收入比、住房空置率以外,还有一个很重要的指标,那就是租金收益率。在美国,利率为1.5%,正常经济状态下CPI为1%,住房的租金率一般为7%,投资回报率一般可以达到4.5%,除掉契税大约有3%以上的净收益。也就是说,在正常的经济发展状态下,只有达到7%的租金收益率,这个房价才是比较合理的,否则,就没有投资的价值,房价就存在泡沫。对中国一线城市来说,100万的房子,一年的正常租金应该达到7万。
  但是,中国一线城市的住房租金率能够达到7%的,几乎没有。开发商说的投资型购房完全的是一种欺诈行为,因为没有谁买房出租是为了亏损。中国的利率是5.7%,假定正常经济发展状态下CPI是2%,也就是说,如果用住房是作为投资,正常的租金收益率应该达到9.7%,否则就是亏损和处在长期贬值状态,是毫无价值的。所以,现在的买房投资只是一个幌子,大家都是为了投机,博短期差价。
  最近,《福布斯》公布了亚洲最贵房租榜,该榜单是依据各地生活成本数据计算的租用高端两居室的价格排名,东京以月租3.2万元位居榜首,香港以2.6万元位居第二,北京则以平均月租金2.5万元名列“探花”。福布斯的这种以纯粹单月租金作为考量指标是不合适的,这种平均月租金的概念比较模煳,没有面积的大小,没有总价的高低,笼统的冠以月租金不太科学,也没有价值。
  住房租金是衡量一个城市经济发展水平和居民收入状况的主要指标。2007年,美国金融海啸爆发前,上海金茂大厦的写字楼是98美元每平方米,2008年跌至38美元每平方米,现在略有回升,大约为48美元每平方米。从标志性写字楼的租金变化可以发现经济的变化情况,是租金比较真实的价值反应。2004年之前,在北京上海深圳广州四个一线城市,同等地区同等品质写字楼的售价是住宅的一倍;2006年,一线城市同等地区同等品质的住宅和写字楼价格相等;2009年,一线城市同等地段同等品质住宅和写字楼的价格已经倒挂,住宅的价格变成了写字楼的一倍。
  同时位于陆家嘴的汤臣一品,均价早已高达12万每平方米,是金茂大厦均价的整整一倍,但是,汤臣一品的租金是多少呢?现在才36美元每平方米,比金茂大厦现在的租金低30%左右。这种现象说穿了,是经济没有发展,而住宅价格出现大量泡沫。从本质上看,整体住宅价格的非理性上扬,既没有经济增长作支撑,更没有居民收入增加来保证,无论是社会财富还是个人收入都没有增加,那么,房价为什么飙升呢?这就是我们常说的流动性泛滥,货币狂赌中国的老百姓是无论如何一定要买房子,价格再高也必须买。
  老百姓买不起房子怎么办呢?空置。北京上海深圳广州空置率已经高达40%,继续造房子继续有人买继续空置。再请看一组北京公寓的实际数据:
  高档公寓
  项目            位置               面积           租金(元/月)
  银泰中心柏悦居  朝阳区建外大街2号  2室2厅132平米  18000
  金地国际花园    建国路郎家园15号   2室2厅140平米  15000
  棕榈泉花园      朝阳公园南门       2室2厅140平米  13000
  泛CBD公寓
  项目             位置               面积           租金(元/月)
  观湖国际         朝阳公园桥东北角   2室2厅118平米   7000
  远洋天地         慈云寺桥东南角     2室2厅120平米   5000
  苹果社区         百子湾南2路        2室2厅110平米   5500
  举一个例子,银泰中心现在售价10万一平方米,132平米是1320万元,年租金合理状况应该为90万,平均每月不低于7.5万,但实际的租金仅为1.8万。换一个角度来说,如果以租金为正常估值标准,银泰中心的房价只能卖260万,也就是说,房价泡沫如果破灭,银泰中心的房价要跌去80%。其他一线城市住宅价格基本类似,只要房价回归理性,都要跌去80%。这一天会很快到来。
- See more at: http://www.bcbay.com/news/newsViewer.php?nid=139260&id=215776#sthash.POw10srE.dpuf

Friday 21 February 2014

盘点中国人去美国的十四种结局

来美国做什么?好多华人在感叹!据联合国统计,世界上最大的忽悠就是纽约的自由女神,女神一举手,全世界不明真相的人们就全来了,包括二十年前来的自己。来美国后的下场有很多,随便举几个,给党和国家领导人以及普通百姓参考。

结局一:来了以后生活得很好,进入主流和政界,自己或者下一代当了市长议员甚至驻华大使,结果到中国一混,被人骂成汉奸。、

结局二:来美国后拿了学位,回中国当了上市公司高管,结果没过几年,被一个叫方舟子的小子揭发说学位是假的,从此抬不起头来。

结局三:来美国后娶妻生子,有工作有房子,混得不好不坏的,结果整天后悔没赶上中国国内崛起的机会,没赚到大钱,没赶上贪污的好机会,没能上市和过呼风唤雨的生活。郁郁寡欢,心病累累,在悲愤中度过余生。

结局四:来美国后特别知足,天蓝地阔空气鲜,美国人个个都是活雷锋,整天信教,跑步,练瑜伽,基本不再说中文,除了还觉得面条比汉堡好吃外,对中国已经没有好感和认同。


结局五:在美国打餐馆装修卖旧货,干着旧社会劳动人民都不干的体力活,每年穿西服戴名牌回国一次,回来后再换上围裙,该干什么干什么。临去世时仰望蓝天骂道:人生原来就是这般造型?

结局六:为逃避双规来到美国,虽然带了钱出来,可是再也找不到往日的辉煌,没人请客,没人送礼,没有情人,嫖娼开不了发票。后悔来美国服无期徒刑,还真不如在中国挨一枪呢。

结 局七:在中国退休后,来美国安度晚年,结果发现自己听不懂,看不懂,不开车,不认路,不挣钱,只花钱,成了聋子瞎子瘸子穷鬼外加傻瓜。与此同时,又突然感 受到自己养大的儿女已经受美国人熏陶变得抠门自私外加孙子。孤独地带了几年孩子,坐了几年监狱,痛快地吵了几次大架,最后毅然投奔祖国,发誓再也不登美帝 国主义的家门。

结局八:好不容易和美国人结了婚,生了谁也不像的混血儿。表面风光的背后,饱尝和一个只能沟通30%到60%的人生活的痛苦。后来呢,离婚当了剩女,在不知不觉中开始一个人的夕阳红。

结局九:在美国呆了好多年,开始精神出现问题,就象北美崔哥我这样逮谁给谁讲脱口秀,说美国如何如何不好,结果没人信;又讲美国如何如何的好,结果遭愤青骂;想说国内如何如何落后,怕被封杀了回不了国;又想使劲夸中国如何如何进步,结果更被确诊为神经有问题。
结局十:在国内是特别有个性的前卫人士,以骂中国喷中国出位走红,变成名嘴大腕儿,终于有一天自己移民来了美国。

结 果发现没一个人认识自己,再没有出场费,经纪人,掌声和粉丝;过着只出不进花一分少一分的生活,没朋友没事业没希望,对伟大祖国的思念悠然而升。不到一年 终于忍不住了,见到五星红旗就落泪,听见国歌就鼻子发酸,看见炸酱面都放声痛哭,谁说一句中国不好就跟谁急。结果,蜕变成一个忠贞不渝的爱国者,完全失去 了当年的个性和酷,被80后90后的粉丝们抛弃。

结局十一:在中国国内是正儿八经的独生子,衣来伸手,饭来张口。到美国不到半年,居然会自己做饭了,会刷碗,会洗衣服了,会自己挣钱了。回国后居然还懂得给长辈夹菜,让人嘲笑说怎么突然懂人事了。从此失去了独生子女的霸气和派头,变成一特别庸俗的人。

结局十二:国内考不上大学来美国,钱也花了,学位也拿了,还是找不到工作。政治庇护申请了没批,没有绿卡,没有前途,身份黑了,随便找份黑工凑合干吧。没想过哪天回国,也没想过哪天去世后埋哪儿。先混着吧。

结 局十三:特小就被爹妈送了美国,在身体和心灵都不健全的情况下,饱受了寄人篱下,离乡背井,文化冲击,孤独寂寞和吃不上羊肉泡馍的摧残,心理出现全面扭 曲:抑郁,自闭,迁怒,颓废。心里就想问母亲几句话:你是我亲妈吗?我招你了惹你了你送我入火坑?我失去的青春你给我补呀?我当初同意你生我了吗?活着这 么累你以为我愿意被生吗?

结局十四:以上这些结局还不包括那些飞来横祸的,比如,在只有美国才有的特快高速公路上的车祸,只有美国才有的枪击,只有美国才有的黑人朋友的抢劫,只有美国才有的911事件,那两座大楼到底埋葬了多少好不容易混到华尔街的中国精英?

总之,离开故土和家人,到别人家去过,对谁都是很难的一件事。这其中包含着太多的说不出来的无奈,委屈,痛苦和叹息。谁要是告诉你来美国跟吃糖豆似的,从头到尾都是甜的,那他就是虚伪,幼稚,浅薄和没感情。

当然,有人会说他混得不错,不属于我上述列举的任何一种,我觉得这也正常,旧社会也不是人人都是皮包骨,也有不小心成了胖子的,也有混得特好的穷人。谁好谁带着,谁苦谁知道;在美国混了20多年的华人谁都知道谁的底儿。过来人应该说真话,最好不在没出过国的人面前吹牛。

美国还是要来,但是要承认来美国是遭罪来了。中国人受得罪多,一般的小罪没什么。世界上人人都怕死,可是没有一个因为死而不愿生出来。一旦生出来,有谁还打算活着回去呢?

北美阶层划分之我见

美国社会的阶层划分之我见 - 作者:介夫
最近网络上出了一个中国社会最新的阶层划分模型, 很有意思。现在,我给大家讲讲本人对美国的阶层划分之见解吧,想必大家也有兴趣:


1级:超级资本家和大财团:超级资本家基本上都在幕后,不直接参与生产经营活动,雇用大批管理者们为他们管理财产,很多都以资本运作以极其巧妙的杠杆原理来赚取利润。超级资本家们掌控着国家大部分的资源,通过代言人积极参与,甚至操控国家政策和法律的制定,通过法规倾斜,垄断,寡头垄断,全面控制占有市场等来大规模,从宏观的层面上掠财。必要时他们会以国家甚至联合国名义动用本国和盟国军队到海外争夺资源或维持期霸主地位。他们是很多邪恶的战争掠夺的始作俑者。他们年收益超过百亿,甚至数千亿,但大部分收益用于再投资已达到家族持续稳固的发展。
这级是美国的超上层社会的隐形富豪们,你基本上不会知道他们是谁,住在那里。他们掌握着美国和很多其他国家的经济命脉。是世界亚洲大陆以外的真正霸主。他们的一个决定, 会直接或间接地影响世界上很多人的命运,比如经济要不要繁荣,股市的牛熊,战争要不要爆发,在那里爆发等等大事。他们对创新型的技术和产品,要么并购或大笔投资,要么围剿,取决于新技术新产品对他们现有财产的损坏程度。他们决不会允许新技术和新产品成为瓜分他们利润的对手。这些人的财富是多少代家族的积累。大笔的财富隐蔽地分布在家族内部和所在企业。国家和社会的统计数据,已经无法显示他们的财产。

他们的存在就是大部分世界经济格局的钢筋,即便是九级地震,或许可以使他们整体调换一个方位,但绝不会散架。如果这种钢筋结构一直延伸到亚洲大陆,其稳固程度将在未来的几百年内无法撼动。

他们绝不炫耀自己的财富,甚至自己开着极其平常的车,穿衣吃饭简单到和一般人没有区别。他们通常对他人极其真诚谦和,听多说少。少部分有种族优越感,但从来不会表露出来。他们注重子女教育,子女可以得到最好的教育,从小观摩并参与决策。0.1%的人口拥有全社会70%的财富。


2级:超大型企业创始人,经理人,中型私有企业业主,大型职业球队教练,超级影视明星等年收入超过一千万美元的一层。他们直接参与管理,企业策略制定,前景规划等。他们中一部分人会雇人游说政府两院,企图得到与自己企业有利的政策和法规。其中不少是受雇于1级富豪们的,所以政策法规等会向他们倾斜的。2级普通人非奇才不能进。当代奇才包括比尔盖茨,谷歌创始人,脸书创始人,苹果创始人,超级连锁零售商沃尔玛家族,和一些文艺体育方面红极一时的幸运儿等等。他们很注重子女教育,子女通常可以进入最好的高等学府。0.9%的人口拥有全社会20%的财富。
这群人对社会贡献比一级隐富更大,更广阔,对推动社会发展在多方面起着不可估量的积极作用。因为他们很多是一代造富的天才,对财富的长期和家族占有欲望不高,很多投身并巨额捐献给慈善行业。所谓来得容易去得快。
他们大多数思想开放,对世界和人类持有比较公平善良的态度,他们通过先进的技术和正当的商业手段来发达,并非唯利是图之辈。他们不会动用国家机器和军队来掠夺世界资源,对战争是有厌恶感的。这与一类隐形富豪们形成了明显的对比。他们虽然不太介入政治风争之中,但他们的经济实力使得国家和地方政府也不敢小觑。记得当年几十个州对微软发起反垄断起诉么?据说盖茨说了一句话,“好吧,欺负我太甚了,我只好搬到加拿大了”,后来此事不是也就不了了之么?

他们在先进技术方面对人类的贡献尤为杰出,几乎引领着每次大规模的技术革命。这些技术革命其实对人类未来的命运是极其重要的。如果没有内燃机车,我们生活的不会这么舒适,但地球气候也许更适合人类生存。如果没有原子弹,二战中的日本还不知道要猖狂几时。现在有了核武器,人类多了一个毁灭的可能。

二级富豪们具有上升为一级隐富的基本条件,是否上升,取决于他们的个人思维方式。二级富豪很多由于太出名,不太出没于公共场合。二级富豪们对人谦和,基本上没有种族歧视感.


3级:中大型企业经理人,高校校长,中小型私有企业业主,高级体育教练等,大型农场场主,退休后的国家总统等,收入再一百到一千万之间。3级是有些资质和人脉的人,通过努力,在机遇适当时可以达到的。他们关心时政,注重寻找政治变化带来的机遇。注重子女教育,子女通常可以进入一到二流的高等学府。
三级阶层承载着社会的主要功能,包括组织生产人类每日所需产品和服务。三级富豪们对人类的贡献是实实在在的。三级基本上不会上到二级,下滑到五六级的可能性很大。他们一般有极高的修养,对普通人和朋友真诚谦和。基本上不与人争执。


4级:高级职业,医生,律师,杰出的个体经营者,中小企业业主,高级教授,包括总统在内的国家高层管理者们。中小型农场场主。收入一般在二十万和一百万之间。许多接受过良好教育,经过努力,可能达到。这个群体从事实业的人们基本不关心政治,不需要人脉。而从事国家地方政府的管理者们,则非常注重政治风向,需要建立较为广大的人脉。
他们注重子女教育。子女通常可以进入一到二流的高等学府。
四级是个相对稳定的群体,他们有一技之长和被人尊重的职业,维持小康以上的生活水平,大多数人对生活心满意足,退休后生活无忧。他们中杰出的部分上到三级是可能的,但几乎不可能上到二级。四级对社会的贡献是直接参与或亲自上手的。是社会生产的中坚力量。
四级富豪们大多有优越感,自信,有时说话时带有权威性。 但一般情况下对人真诚谦和。


5级:普通白领,中低政府职员,中小学老师等年薪在5-20万之间。本科毕业,办事兢兢业业就可以达到。快乐地过日子,不关心政治,只关心体育和娱乐,不需要人脉。比较注重子女教育,子女大多在2-3流高校。
五级是个相对不稳定的群体,他们有些有一技之长和被人尊重的职业,维持小康以上的生活水平。有些有技但不长,生活和职业不是很稳定。大多数人对生活比较满意,退休后生活基本无忧。他们中杰出的部分上到四级是可能的,但总体概率不高,五级对社会的贡献是最直接参和必须亲自上手的。也是社会生产的中坚力量。
五级们不少自我感觉良好,自信,有时说话时带有权威性的口气甚至会或多或少看不起目前不如他的人。 五级人普遍修养水平一般,部分人甚至比较势利,巴结讨好三四级人的情况常有发生。


6级:底层白领如秘书,接电话等办公室办事员,蓝领和个体手工劳动者们,年收入3-10万。吃饱喝足就快乐,子女学费基本靠自己解决。基本不重视子女教育,子女通常在公立或社区大专院校。
六级人民基本上无一技之长。工作基本上没有资格挑剔,处于养家糊口状态。文化偏见和种族歧视常有所表现,有时甚至对人傲慢。亲身经历几次都是门诊部的接线员。但大多数人待人接物不失基本礼貌。


7级:无固定职业,生活艰苦。经常领救济金,随时可能沦为无家可归者。


8级:流落街头,无家可归的人。

整个社会按人口分配程橄榄形结构,4,5,6占人口总数90%以上 。

这里来的人大多该在三四级吧?

Wednesday 19 February 2014

http://www.flychina.com/

FlyChina: 17家航空公司特惠机票

FlyChina was founded in 1997 as an online travel company with a strong commitment towards those traveling between China and the United States. With FlyChina's unique Low Fare Wizard, numbers of satisfied customers have been able to compare all major airline discount fares instantly, choosing the lowest airfares. FlyChina's Low Fare Wizard has revolutionized the process of online booking and is continually being updated to better serve your air travel needs.
Currently, we serve over 200 U.S. cities and 70 destinations throughout China and surrounding countries. In addition, we use the latest technology available in helping you plan your trip, allowing for a quick and easy experience. As always, your satisfaction is our utmost priority.
As a member of the Better Business Bureau in the Online Reliability Program, we hold an excellent service rating (details). We have also been appointed by the Airlines Reporting Corporation (ARC), endorsed by the International Airlines Travel Agent Network (IATA), and are a registered Seller of Travel in Florida (ST-26190).
FlyChina has also been recognized by the following publications:
Leading travel expert Arthur Frommer writes "Smart Travelers Will Use FlyChina.com to Get to Shanghai's World Expo 2010." Click here to read.
Business writer Doreen Hemlock for the South Florida Sun-Sentinel writes about FlyChina's ample ability in meeting the needs for those traveling to China. Click here to read.

    • 地区:
      Vancouver
    • 地址:
      951 Yamato Road, Suite 106, Boca Raton, FL 33431-4425, USA
    • 类别:
       旅游机票

      • 联系人:
        FlyChina Infotek, In
      • 电话:
        800-318-1363
      • 电子邮件:
        hq@flychina.com

Saturday 15 February 2014

C# TCP/IP sending image
















//client.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace tcpclient_async
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            pictureBox1.Image = Image.FromFile(@"C:\Users\Public\Pictures\demo photo\13.JPG");

            string strHostName = System.Net.Dns.GetHostName();
            IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());

            foreach (IPAddress x in ipHostInfo.AddressList)
            {
                comboBox1.Items.Add (x.ToString());
            }
        }

        public delegate void callrichtext(String ss);
        public callrichtext myDelegate;

        public void richtextappend(String s)
        {
            richTextBox1.AppendText(s);
        }

        public delegate void callrichtext2(String ss);
        public callrichtext2 myDelegate2;

        public void richtextappend2(String s)
        {
            richTextBox3.AppendText(s);
        }

        public delegate void buttonenable();
        public buttonenable myDelegate3;

        public void button()
        {
            button2.Enabled=true;
        }

        private Socket client;
        private byte[] data = new byte[1024000];
        private int size = 1024000;
        private OpenFileDialog y;
        private bool initialpic = true;

        private void Form1_Load(object sender, EventArgs e)
        {
            this.myDelegate = new callrichtext(richtextappend);
            this.myDelegate2 = new callrichtext2(richtextappend2);
            this.myDelegate3 = new buttonenable(button);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox3.AppendText( "Connecting... \n");
            Socket newsock = new Socket(AddressFamily.InterNetwork,
                                  SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint iep = new IPEndPoint(IPAddress.Parse(textBox1.Text), 9050);
            newsock.BeginConnect(iep, new AsyncCallback(Connected), newsock);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            /*MemoryStream ms = new MemoryStream();
            pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            byte[] message = ms.ToArray();*/

            FileInfo fileinfo;
            byte[] message;
            FileStream fs;

            if (initialpic == true)
            {
                fileinfo = new FileInfo(@"C:\Users\Public\Pictures\demo photo\13.JPG");
                message = new byte[fileinfo.Length];
                fs = new FileStream(@"C:\Users\Public\Pictures\demo photo\13.JPG", FileMode.Open, FileAccess.Read);
            }
            else
            {
                fileinfo = new FileInfo(y.FileName);
                message = new byte[fileinfo.Length];
                fs = new FileStream(y.FileName, FileMode.Open, FileAccess.Read);
            }

            fs.Read(message, 0, message.Length);
            fs.Close();
            GC.ReRegisterForFinalize(fileinfo);
            GC.ReRegisterForFinalize(fs);

            client.BeginSend(message, 0, message.Length, SocketFlags.None,
                         new AsyncCallback(SendData), client);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            client.Close();
            richTextBox3.AppendText ("Disconnected \n");
        }

        private void Connected(IAsyncResult iar)
        {
            client = (Socket)iar.AsyncState;
            try
            {
                client.EndConnect(iar);
                richTextBox3.Invoke(this.myDelegate2, new Object[] { "Connected to: " + client.RemoteEndPoint.ToString() +"\n"});
                client.BeginReceive(data, 0, size, SocketFlags.None,
                              new AsyncCallback(ReceiveData), client);
                button2.Invoke(this.myDelegate3, new Object[] { });
            }
            catch (SocketException)
            {
                richTextBox3.Invoke(this.myDelegate2, new Object[] { "Error connecting \n"});
            }
        }

        private void ReceiveData(IAsyncResult iar)
        {
            Socket remote = (Socket)iar.AsyncState;
            int recv = remote.EndReceive(iar);
            string stringData = Encoding.ASCII.GetString(data, 0, recv);
            richTextBox1.Invoke(this.myDelegate, new Object[]{stringData+"\n"});
        }

        private void SendData(IAsyncResult iar)
        {
            Socket remote = (Socket)iar.AsyncState;
            int sent = remote.EndSend(iar);
            remote.BeginReceive(data, 0, size, SocketFlags.None,
                          new AsyncCallback(ReceiveData), remote);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            textBox1.Text = comboBox1.SelectedItem.ToString();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            y = new OpenFileDialog();
            y.Title = "pic selection";
            y.InitialDirectory = "c:\\";
            y.Filter = "all files (*.*)|*.*|image files(*.jpg,*.bmp,*.gif)|*.jpg;*.bmp;*.gif";
            y.FilterIndex = 2;
            if (y.ShowDialog() == DialogResult.OK)
            { pictureBox1.Image = Image.FromFile(y.FileName); }

            initialpic = false;
        }

    }
}
--------------------------------------------------------------------------------------
//server.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace server_async
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            string strHostName = System.Net.Dns.GetHostName();
            IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());

            richTextBox1.AppendText("local server address\n");

            foreach (IPAddress x in ipHostInfo.AddressList)
            {
                richTextBox1.AppendText(x.ToString()+"\n");
            }

            server = new Socket(AddressFamily.InterNetwork,
                   SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
            server.Bind(iep);
            server.Listen(5);
            server.BeginAccept(new AsyncCallback(AcceptConn), server);
        }

        public delegate void callrichtext(String ss);
        public callrichtext myDelegate;

        public void richtextappend(String s)
        {
            richTextBox1.AppendText(s);
        }

        private Socket server, oldclient;
        private byte[] data = new byte[10240000];
        private int size = 10240000;

        private void AcceptConn(IAsyncResult iar)
        {
            Socket oldserver = (Socket)iar.AsyncState;
            oldclient = oldserver.EndAccept(iar);
            richTextBox1.Invoke(this.myDelegate, new Object[] { "Connected to: " + oldclient.RemoteEndPoint.ToString() + "\n" });
            string stringData = "Welcome to my server";
            byte[] message1 = Encoding.ASCII.GetBytes(stringData);
            oldclient.BeginSend(message1, 0, message1.Length, SocketFlags.None,
                        new AsyncCallback(SendData), oldclient);
        }

        private void SendData(IAsyncResult iar)
        {
            Socket client = (Socket)iar.AsyncState;
            int sent = client.EndSend(iar);
            client.BeginReceive(data, 0, size, SocketFlags.None,
                        new AsyncCallback(ReceiveData), client);
        }

        private void ReceiveData(IAsyncResult iar)
        {
            Socket client = (Socket)iar.AsyncState;
            int recv = client.EndReceive(iar);
            //MessageBox.Show(recv.ToString());
           
            if (recv == 0)
            {
                client.Close();
                richTextBox1.Invoke(this.myDelegate, new Object[]{ "Waiting for client..."+"\n"});
                server.BeginAccept(new AsyncCallback(AcceptConn), server);
                return;
            }

            MemoryStream ms = new MemoryStream(data);
            Image returnImage = Image.FromStream(ms);
            pictureBox1.Image = returnImage;

            string receivedData = "server has received pic";
           
            byte[] message2 = Encoding.ASCII.GetBytes(receivedData);
            client.BeginSend(message2, 0, message2.Length, SocketFlags.None,
                         new AsyncCallback(SendData), client);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.myDelegate = new callrichtext(richtextappend);
        }

    }
}


reference:
http://www.codeproject.com/Questions/333909/Sending-a-picturebox-image-from-server-to-client-i
http://w3mentor.com/learn/asp-dot-net-c-sharp/asp-dot-net-language-basics/use-sockets-to-send-and-receive-images-in-c-net/

Wednesday 12 February 2014

加拿大RRSP买房首付计划 可帮你拿回大笔退税

加拿大首次买房时,政府允许人们最多从RRSP帐户中取出2.5万,用于首付,如果是夫妇两人,最多能取5万,条件是在未来15年内存回,才不会导致罚款。
  这一规定自1999年起实施,2.5万的最高限额从未变过。但问题是,在此期间,国内房价却是一路持续飙升。
  如果在温哥华买房,5万块钱根本不够支付政府支持的最低首付额。
  加拿大地产协会(CREA)表示,明年平均房价会涨到39.1万,这意味着5万块钱还不到13%的首付,无法逃避支付昂贵的按揭拖欠保险。
  加拿大21世纪房地产公司执行长罗比(Don Lawby)表示,不知目前RRSP买房计划到底有多可行,如果提高限额,不知会发生什么情况。
  目前,TFSA免税帐户也逐日成为中高效储蓄方式。截至2014年,每个人累计可存的TFSA最高限额为3.1万,这一金额逐年都在增加。TFSA 帐户中的钱也可随时取出并随时供回。罗比说,要进行买房投资,得需要RRSP和TFSA两种储蓄方式才行,而且还得看住在哪里。
  反对RRSP买房计划的人认为,提高最高取款限额会鼓励年轻人拿出RRSP退休储蓄来买房,而且15年内如果不存回这笔钱,还得面临巨额罚款。
  帝银世界市场副首席经济师他尔(Benjamin Tal)表示,也有人认为,RRSP对于买房储蓄来说,并非最有效方式。他说,由于首次买房者被挤出房市,而年纪大的人和购买第2个房产的人根本就不使用RRSP,因此使用RRSP买房计划的人并未见大幅增长。
  monstermortgage.ca网站负责人加埃塔诺(Vince Gaetano)表示,RRSP买房计划多被人用于避税,许多人在这个时候,会存一笔RRSP,然后取出RRSP用于买房首付,以此拿到政府大笔退税。
  他说,如果是未来90天会买房,现在就得存入RRSP,因为RRSP存入90天后才能取出,此举一来可拿大笔退税,二来可用于买房首付。

Friday 7 February 2014

RRSP affect on CPP OAS GIS

RRSP对老年福利的影响

  一直以来加拿大有这样一种说法:买RRSP现在可以退税,但将来退休时取出时则会加大个人收入,从而减少政府养老福利的领取额,所以RRSP是骗人的把戏。这种说法虽然极端,但代表了一种普遍的模煳不清的担忧:买RRSP究竟会在多大程度上影响我们领取政府养老福利呢?

  澄清这个问题其实很简单,只需要对政府养老福利的发放条件稍加了解即可。我们知道,加拿大政府为老人提供的养老福利主要有三种,即:Canada Pension Plan (CPP)(在魁北克叫做QPP)、Old Age Security Benefit (OAS) 和Guaranteed Income Supplements (GIS)。下面对这三者分别加以考察:

  (1) CPP(俗称“加拿大养老金”)

  这是一个政府强制的个人(和公司)供款社会保障计划。其退休福利金的多少与个人供款的多少和供款期的长短挂钩,而与退休后的个人收入无关。所以它不受RRSP的影响。

  (2) OAS( Old Age Security,俗称“老人金”)

  这是面向所有年满65岁且在加拿大居住10年以上的加拿大居民每月发放的老年福利金,由联邦税收支付,无须个人供款。OAS的数额与在加拿大居住时间地长短有关。

  具体来说,居住时间超过40年的老人可领取全额OAS(根据物价指数每三个月调整一次,2010年总额为$6222.15);居住时间不满40年的,按居住时间的比例领取部分OAS。OAS的数额还与居民的年净收入有关。年净收入超过一定上限的居民,可领取的OAS按超出上限收入的15%减少。

  举例来说,2010年的OAS收入上限值是$66,733,如果一位老人这年的净收入在$66,733以下,他可领取全额OAS;如果他的净收入在$66,733和$108,214之间,他可领取部分OAS;如果他的净收入在$108,214以上,他不能领取OAS。

  由此可见,RRSP的确可能对OAS产生影响。但值得注意的是,这种影响的程度非常有限。

  其一,RRSP要对OAS产生影响,你退休后的年收入要足够高(如果把通胀调整因素考虑进去,20 年后的OAS年收入上限值应该在$100,000左右);

  换句话说,你预计的退休收入只要不超过$100,000(假如届时RRSP是你的主要收入来源,按5%的最低取款要求计算,这意味着你的RRSP总值要达到或接近$200万),你都不用担心OAS会减少。

  其二,如果你退休后真的有10万以上的年收入,实在也没有必要去计较那不到十分之一的OAS。

  (3) GIS(俗称“低保补助”)

  作为OAS的补充,它为低收入老人提供额外养老补助。GIS的数额取决于老人的婚姻状态和年收入。以单身老人为例,2010年年收入(不含OAS和GIS)低于$15,960的,可领取部分或全额GIS;年收入高于$15,960就不能领取GIS。

  显而易见,RRSP的确会对GIS产生相当大的影响;不仅是RRSP,公司养老金以及CPP都会影响到GIS的领取。事实上,有公司养老计划的人,通常都不属于领取GIS的低收入阶层,也不会满足于过领取GIS的退休生活;而为GIS担心的人,通常都没有公司退休计划,或者没有多少应税收入需要用RRSP来减税。

  结论:RRSP最适合现在高收入,将来中等收入人群

  通过上面的考察,我们可以得出以下结论:一般来说,加拿大老年政府福利确实会受收入的影响而减低。但RRSP供款对CPP完全没有影响,对OAS几乎没有影响或影响不大,对GIS有较大的影响。

  如果希望将来能最大限度地领取GIS (也就是预计退休后低收入在2万以下),买RRSP的确没有必要; 否则,没有必要担心买RRSP会影响政府福利的问题。

  绝大多数加国民众,退休后年收入不大可能超过7万元。所以论者指劳工阶层目前应尽可能购买RRSP,为自己日后退休而先行储蓄金钱。

  RRSP VS TFSA:

  最新一期的Moneysense 也谈到老人金( OAS clawbacks ) 问题,并比较了几种情况下,应该首先选择RRSP还是TFSA,文章结论称:

  与TFSA相比,RRSP适合“目前高收入+退休高收入“ 人群,但不太适合两类人群:目前高收入+退休高收入 ;目前低收入+退休低收收入 ;  家园 论坛

  该文章称,从投资策略来看,对于不少加拿大人,投资选择顺序应该: RESP 》 归还房贷  》TFSA 》 RRSP

Thursday 6 February 2014

Wednesday 5 February 2014

C# ftp




//form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ftp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            listView1.Columns.Add("permission #of files                           date                       name", -2, HorizontalAlignment.Left);

            ftpClient = new fttp(@textBox2.Text, "anonymous", "anonymous");
            string[] simpleDirectoryListing = ftpClient.directoryListDetailed("");

            treeView1.BeginUpdate();

            treeView1.StateImageList = new ImageList();
            treeView1.StateImageList.Images.Add(Image.FromFile(@"C:\Users\abc\Desktop\1.jpg"));
            treeView1.StateImageList.Images.Add(Image.FromFile(@"C:\Users\abc\Desktop\2.jpg"));
         
            nod = new TreeNode();
            nod.Text = "root directory";
            nod.Tag = textBox2.Text;
            nod.StateImageIndex = 1;
                 
            treeView1.Nodes.Add(nod);

            for (int i = 0; i < simpleDirectoryListing.Count()-1; i++)
            {
                myitem = new ListViewItem(simpleDirectoryListing[i], 0);          
                listView1.Items.Add(myitem);          

                string[] words = simpleDirectoryListing[i].Split(' ');
                nod = new TreeNode();
                nod.Text = words[words.Length - 1];
                nod.Tag = treeView1.Nodes[0].Tag.ToString() + words[words.Length - 1];
                nod.StateImageIndex = 0;
                treeView1.Nodes[0].Nodes.Add(nod);
            }
        }

        private TreeNode nod;
        private ListViewItem myitem;
        private fttp ftpClient;

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            textBox1.Text = e.Node.Tag.ToString();
        }

        private void treeView1_DoubleClick(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode == null) { return; }
            string[] simpleDirectoryListing = ftpClient.directoryListDetailed(treeView1.SelectedNode.Tag.ToString().Replace(textBox2.Text,""));
                     
            listView1.Items.Clear();

            for (int i = 0; i < simpleDirectoryListing.Count()-1; i++)
            {
             
                string[] words = simpleDirectoryListing[i].Split(' ');
                nod = new TreeNode();
                nod.Text = words[words.Length - 1];
                nod.Tag = treeView1.SelectedNode.Tag + "/" + words[words.Length - 1];
                nod.StateImageIndex = 0;

                if (treeView1.SelectedNode.StateImageIndex == 0)
                {
                    bool replica = false;

                    for (int j = 0; j < treeView1.SelectedNode.GetNodeCount(true); j++)
                    {
                        if (treeView1.SelectedNode.Nodes[j].Text == nod.Text) { replica = true; }
                    }


                    if (!replica)
                    {
                        treeView1.SelectedNode.Nodes.Add(nod);
                    }
                }

                myitem = new ListViewItem(simpleDirectoryListing[i], 0);
                listView1.Items.Add(myitem);              
            }

            switch (treeView1.SelectedNode.StateImageIndex)
            {
                case 0:
                    treeView1.SelectedNode.StateImageIndex = 1;
                    break;
                case 1:
                    break;
                default:
                    treeView1.SelectedNode.StateImageIndex = 0;
                    break;
            }
        }

        private void downloadToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.ShowDialog();
            ftpClient.download(treeView1.SelectedNode.Tag.ToString().Replace(textBox2.Text, ""), @saveFileDialog1.FileName);
        }
    }
}
------------------------------------------------------------------------------------------------
//fttp.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace ftp
{
    class fttp
    {
        private string host = null;
    private string user = null;
    private string pass = null;
    private FtpWebRequest ftpRequest = null;
    private FtpWebResponse ftpResponse = null;
    private Stream ftpStream = null;
    private int bufferSize = 2048;
        
    /* Construct Object */
    public fttp(string hostIP, string userName, string password) { host = hostIP; user = userName; pass = password; }

    /* Download File */
    public void download(string remoteFile, string localFile)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + remoteFile);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Get the FTP Server's Response Stream */
            ftpStream = ftpResponse.GetResponseStream();
            /* Open a File Stream to Write the Downloaded File */
            FileStream localFileStream = new FileStream(localFile, FileMode.Create);
            /* Buffer for the Downloaded Data */
            byte[] byteBuffer = new byte[bufferSize];
            int bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
            /* Download the File by Writing the Buffered Data Until the Transfer is Complete */
            try
            {
                while (bytesRead > 0)
                {
                    localFileStream.Write(byteBuffer, 0, bytesRead);
                    bytesRead = ftpStream.Read(byteBuffer, 0, bufferSize);
                }
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            /* Resource Cleanup */
            localFileStream.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        return;
    }

    /* Upload File */
    public void upload(string remoteFile, string localFile)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + remoteFile);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpRequest.GetRequestStream();
            /* Open a File Stream to Read the File for Upload */
            FileStream localFileStream = new FileStream(localFile, FileMode.Create);
            /* Buffer for the Downloaded Data */
            byte[] byteBuffer = new byte[bufferSize];
            int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
            /* Upload the File by Sending the Buffered Data Until the Transfer is Complete */
            try
            {
                while (bytesSent != 0)
                {
                    ftpStream.Write(byteBuffer, 0, bytesSent);
                    bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
                }
            }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            /* Resource Cleanup */
            localFileStream.Close();
            ftpStream.Close();
            ftpRequest = null;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        return;
    }

    /* Delete File */
    public void delete(string deleteFile)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)WebRequest.Create(host + "/" + deleteFile);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Resource Cleanup */
            ftpResponse.Close();
            ftpRequest = null;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        return;
    }

    /* Rename File */
    public void rename(string currentFileNameAndPath, string newFileName)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)WebRequest.Create(host + "/" + currentFileNameAndPath);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.Rename;
            /* Rename the File */
            ftpRequest.RenameTo = newFileName;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Resource Cleanup */
            ftpResponse.Close();
            ftpRequest = null;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        return;
    }

    /* Create a New Directory on the FTP Server */
    public void createDirectory(string newDirectory)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)WebRequest.Create(host + "/" + newDirectory);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Resource Cleanup */
            ftpResponse.Close();
            ftpRequest = null;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        return;
    }

    /* Get the Date/Time a File was Created */
    public string getFileCreatedDateTime(string fileName)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + fileName);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.GetDateTimestamp;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpResponse.GetResponseStream();
            /* Get the FTP Server's Response Stream */
            StreamReader ftpReader = new StreamReader(ftpStream);
            /* Store the Raw Response */
            string fileInfo = null;
            /* Read the Full Response Stream */
            try { fileInfo = ftpReader.ReadToEnd(); }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            /* Resource Cleanup */
            ftpReader.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;
            /* Return File Created Date Time */
            return fileInfo;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        /* Return an Empty string Array if an Exception Occurs */
        return "";
    }

    /* Get the Size of a File */
    public string getFileSize(string fileName)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + fileName);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.GetFileSize;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpResponse.GetResponseStream();
            /* Get the FTP Server's Response Stream */
            StreamReader ftpReader = new StreamReader(ftpStream);
            /* Store the Raw Response */
            string fileInfo = null;
            /* Read the Full Response Stream */
            try { while (ftpReader.Peek() != -1) { fileInfo = ftpReader.ReadToEnd(); } }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            /* Resource Cleanup */
            ftpReader.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;
            /* Return File Size */
            return fileInfo;
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        /* Return an Empty string Array if an Exception Occurs */
        return "";
    }

    /* List Directory Contents File/Folder Name Only */
    public string[] directoryListSimple(string directory)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpResponse.GetResponseStream();
            /* Get the FTP Server's Response Stream */
            StreamReader ftpReader = new StreamReader(ftpStream);
            /* Store the Raw Response */
            string directoryRaw = null;
            /* Read Each Line of the Response and Append a Pipe to Each Line for Easy Parsing */
            try { while (ftpReader.Peek() != -1) { directoryRaw += ftpReader.ReadLine() + "|"; } }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            /* Resource Cleanup */
            ftpReader.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;
            /* Return the Directory Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you Append (I use | in This Example) */
            try { string[] directoryList = directoryRaw.Split("|".ToCharArray()); return directoryList; }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        /* Return an Empty string Array if an Exception Occurs */
        return new string[] { "" };
    }

    /* List Directory Contents in Detail (Name, Size, Created, etc.) */
    public string[] directoryListDetailed(string directory)
    {
        try
        {
            /* Create an FTP Request */
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(host + "/" + directory);
            /* Log in to the FTP Server with the User Name and Password Provided */
            ftpRequest.Credentials = new NetworkCredential(user, pass);
            /* When in doubt, use these options */
            ftpRequest.UseBinary = true;
            ftpRequest.UsePassive = true;
            ftpRequest.KeepAlive = true;
            /* Specify the Type of FTP Request */
            ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
            /* Establish Return Communication with the FTP Server */
            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
            /* Establish Return Communication with the FTP Server */
            ftpStream = ftpResponse.GetResponseStream();
            /* Get the FTP Server's Response Stream */
            StreamReader ftpReader = new StreamReader(ftpStream);
            /* Store the Raw Response */
            string directoryRaw = null;
            /* Read Each Line of the Response and Append a Pipe to Each Line for Easy Parsing */
            try { while (ftpReader.Peek() != -1) { directoryRaw += ftpReader.ReadLine() + "|"; } }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
            /* Resource Cleanup */
            ftpReader.Close();
            ftpStream.Close();
            ftpResponse.Close();
            ftpRequest = null;
            /* Return the Directory Listing as a string Array by Parsing 'directoryRaw' with the Delimiter you Append (I use | in This Example) */
            try { string[] directoryList = directoryRaw.Split("|".ToCharArray()); return directoryList; }
            catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        }
        catch (Exception ex) { Console.WriteLine(ex.ToString()); }
        /* Return an Empty string Array if an Exception Occurs */
        return new string[] { "" };
    }
    }
}



reference:
http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class
http://stackoverflow.com/questions/15268760/upload-file-to-ftp-using-c-sharp

treeview:
http://www.codeproject.com/Articles/23115/Working-with-TreeView-Controls

ftp online tester:
http://ftptest.net/#result