‘壹’ 大家听听这英文是什么歌,下载地址http://yysk.tsyz.net/music/You%20were%20there.mp3,我下载不到歌词
楼上的,歌词完全对不上啊
应该是这个吧:
You Were There
by Babyface
Time passes, the world changes
But I'm still the same ole' kid
And your jokes still bring me laughter
As if you still were here
And it hurts
When I smile
'Cause my heart still remembers
When you were around
'Cause you were there
When no one was
Just when I thought nobody cared
You showed me love
'Cause you were my friend
You always told me
And I am still here
Because you were there
So precious, small treasures
A time when truth was innocent
True friendship, was all we were after
A place where kids could still be kids
And it hurts
But I'm glad
'Cause at least I was blessed
To have you as my friend
[HOOK]
You're my best friend
There are no accidents
God has a plan for everyone
And he brought you in my life
To show me what a good friendship was
就是babyface(娃娃脸)唱的,下载地址:http://ftp.116.com.cn/pub/9sky/wma8/128/娃娃脸,Babyface_christmas with babyface/10.you were there.wma
babyface的一资料(有兴趣就看看吧),呵呵
流行音乐界最炙手可热的天王词曲创作与制作人兼歌手Babyface ,其在短短的数年内,便已为自己与其他艺人共造就了115首流行与 R&B榜的畅销曲,其中含括了115首R&B 榜Top 10、50首流行榜Top 10 ,以及16首的流行榜冠军曲,同时,他亦已赢得了九座葛莱美音乐奖 的肯定与荣耀。
在与Babyface所合作过的艺人名单中,虽触目所及的尽是些乐坛最赫赫有名的顶尖人物,包括了Michael Jackson,Mariah Carey, Celine Dion,Whitney Houston,Madonna,Boyz II Men,Eric Clapton 以及Toni Braxton等,但其中也不乏一些当红艺人团体是由他一手所捧红的,这些原就具备潜力与实力的艺人们,有些是初出茅庐毫无背景可言(如:TLC,Jon. B,Pebbles,Toni Braxton、Karyn White, Paula Abl ,以及Babyface兄长所组的乐团 After 7 )、或是面临瓶颈转型的关键时机(如:Whitney Houston,SheenaEaston TheWhispers)、或是脱队自立门户之初变数难料(如:Bobby Brown, Johnny Gill),却都因受到Babyface赏识,经由他参与专辑作品的创作、制作或两者兼具,且在他的金字招牌背书与力荐下,一举成名为乐坛的新生代巨星或稳下其既有之江山!截至1996年,他所经手过的单曲与专辑在全球销售已分别创下了2600万与7200万张的惊人纪录了,就连专业音乐杂志界的龙头老大"滚石杂志"都尊称他为"音乐界最具可能性的最佳词曲作家兼制作人"!
本名为Kenneth Edmonds的Babyface,1959年4月10日出生于美国印第安那州的首府Indianapolis市,是家中的六兄弟之一。Babyface在六年级时首次有了表演经验,是参与他兄长Melvin的乐团在高中舞会上的演出,七年级时谱写出他生平的第一首歌曲,之后又陆续加入好些 个校际R&B乐团担任主唱与吉他手(现今的他亦精擅于键盘乐器),在升上高中前,Babyface便已开始在中西部各地的俱乐部以及饭店大厅内做表演。
1979年,Babyface组了一支放克摇滚乐团Manchild,并正式展开他 的职业音乐生涯。Manchild在Chi-Sound旗下共录制了两张专辑,口碑不恶。
1981年,一个Babyface生命转折点出现的年份。当Babyface在Michigan 饭店大厅表演的期间,接到了一通邀约的电话,请他加入一个来自俄亥俄州辛辛那提市名叫The Deele的乐团,因而与该团的鼓手及词曲作家 Antonio "L.A." Reid结识,两人一拍即合,自此成为密友及工作伙伴。 “打从一开始,我俩的个性就达到完全的互补与相容。”Babyface回忆道。 “我本身是个安静的人,而L.A.则十分跃”Babyface与L.A.两人共同担负起为The Deele 谱词、填曲并规划音乐生涯的重责大任,并开始参与制作方面的工作(虽然那时他们对制作一事尚懵懵懂懂),音乐才华得以初次尽情展现。另外一提的是,“Babyface”这个别号,亦是在那期间内由另一位俄亥俄州的乐手Bootsy Collins,率先此别名来(称有着稚嫩面容的他),并自此一直沿用下来。
1983年,The Deele这支六人乐团与 Solar 唱片公司签约,并发表了 他们的首张专辑《Street Beat 》,并在1984年间缔造了两首排行名曲 “Body Talk”“Just My Luck”。1985年,他们又成功地出版了他们自 行担任制作《Material Thangz 》专辑,不过真正让他们在音乐版图中占 下一席之地,则是起于1987年的专辑《Eyes Of A Stranger》。
《Eyes Of A Stranger》这张专辑不仅成为The Deele排行最高的专辑 ,由Babyface所谱写并在桥段部份献声的单曲“Two Occasions”,更在 1988年间成为Billboard流行榜Top 10、R&B榜#4的经典名曲。许多人也许不知道,曾获葛莱美"节奏蓝调最佳男歌手"奖项的Babyface,在加入The Deele乐团早期,并不认为自己能做个衬职的歌手,所以在The Deele的首张专辑中,他并未参与演唱,直到在第二张专辑中,演唱了自己所创作的 歌曲"Sweet November"之后,想法才随之改变,甚至开始有了出个人专辑 的想法。Babyface的个人处女作"Lovers",同样是发表于1987年初,很快即受到全美各大电台的好评,个人知名度亦由此开启。
虽然忙着乐团与个人的发展,Babyface在这期间仍持续地与L.A. Reid 以及稍后的Daryl Simmons合作,为其他艺人量身打造曲子与制作专辑。 这个音乐小组最先的成功作品,是为The Whispers所打造的流行榜#7及R&B 榜冠军的单曲“Rock Steady”,且自此之后,即不断地为各艺人团体所争相邀请跨刀,而排行榜上亦不断出现他们的作品,且不只一次可看到两人为不同的艺人所作的歌曲同时出现在Top 10内!
1989年,Babyface的个人第二张专辑《Tender Lover》发行。《Tender Lover》 专辑陆续产生了“It's No Crime ”“Tender Lover”“Whip Appeal ” “My Kind A Girl”等四首排行榜Top 3 畅销单曲,使得专辑销售随之突破两百万张,更将Babyface推上了天王巨星的行列。
虽然由于个人事业的繁忙,而使得Babyface不得不离开The Deele,但他与L.A.的合作却并不因此受限,两人甚至成立了一个名为Laface的唱片公司,因为他认为个人的歌唱生涯与和L.A.搭档创作,是两件不相冲突的 事,而两者皆能兼顾并有很好的成绩,更是他引以自豪的!做为乔治亚州亚特兰大市的领导厂牌Arista唱片公司的分支机构的Laface唱片公司,不仅迅速地成为当地居首位的厂牌,更相继于1992,1993,1994创造了TLC的三百万张白金专辑《Oooooh...On The TLC Tip》,Toni Braxton的流行与节奏蓝调双料冠军同名专辑,以及TLC的八百万张超白金专辑 “Crazysexycool”,为流行与黑人音乐界引进了一股旺盛的新势力!
1991年, 唱片公司为Babyface 推出了一张名为《A Closer Look 》的 精选专辑,依然不负期望地成为双白金专辑,辑中收录了他多首成名力作 ,其中尚有一首与Karyh White 共同诠释的抒情佳作“Love Saw It ”, 和与灵魂女歌手Pebbles 合唱的情歌“Love Makes Things Happen”。
1992年,是Babyface极为成功且丰收的一年,由他为Boyz II Men所写及制作的曲子“End Of The Road”,不仅破纪录地蝉连Billboard单曲 榜冠军13周,成为最畅销的单曲之一外,更为他赢得了葛莱美"最佳R&B歌 曲"(与L.A.,Daryl Simmons分享)"最佳专辑制作人"(与L.A.分享)等奖项。无独有偶地,Babyface为Boyz II Men制作谱写的1994年畅销单曲 “I'll Make Love To You”,亦再次打破其在1992年甫创下的新纪录, 成为Billboard流行榜14周冠军曲,并再度于1995年荣获葛莱美"最佳R&B 歌曲"殊荣,此外BMI Award也颁发了"最佳歌曲"奖座给他,使他所收集到 的BMI 奖座数量已超过了40座!
1993年8月,Babyface出版了他的第三张录音室个人专辑 《For The Cool In You》。该辑共推出了四首Top 10畅销曲,分别是R&B榜 冠军曲“For The Cool In You”、两首R&B榜Top 10作品“Never Keeping Secrets”“And Our Feelings”以及流行榜#4名作“When Can I See You” 。“When Can I See You”这首旋律美丽的民谣灵魂抒情曲,已拥有超过50万张的销售纪录,并成为Babyface流行榜上排行名次最高的金唱片单曲 。截至1994年11月的统计,《For The Cool In You》专辑已在全美销售超过两百万张,获双白金荣耀。
同样是在1993年间,,Babyface亦以雷霆万钜的姿态挖掘了女歌手 Toni Braxton,并为其制作了前述的同名冠军专辑,专辑中由Babyface与L.A. Reid 合作的单曲“Another Sad Love Song”,及 “Breathe Again”都有绝佳的成绩,Toni 并在隔年的葛莱美奖典礼中大放异彩,夺得最佳新进艺人,这不得不归功于Babyface及 L.A. Reid的共同栽培。
尽管他的音乐周边事业已达到如钻石般璀灿的巅峰,但他回馈与关怀社会的心却丝毫不因此而懈怠。1994年,Babyface自告奋勇出马担任以华盛顿市做为基地之"寄宿儿计划"(Boarder Baby Project)的全国发言人 ,这个慈善计划团体其宗旨是要帮助每年在各医院产科病房所产生之数以千计的弃婴,并为他们建了一间名为"蓝色小屋"(The Little Blue House) 的居所,做为这些弃婴的暂时居住地,提供他们一个稳定、健康且充满爱的环境,直到他们被人收养。“我发誓会尽己能,”Babyface说。“去帮 助这些无法为自己说话的小婴儿们。”为了支持自己的誓言,Babyface亦破例地于1994年11月12日,举办了他个人演艺生涯有史以来的第一场演唱会,来为兴建"蓝色小屋"的计划筹款,稍后他亦召集了After 7,El DeBarge 等艺人团体,发起录音计划为"寄宿儿计划"增加资金。
1994年12月27日,Babyface以明尼苏达州的明尼亚波利斯市为起站, 展开一连串他个人的首次巡回演唱,与他共同挂帅演唱的团体是Boyz II Men。”“Kenneth 'Babyface' Edmonds早已经在流行与节奏蓝调音乐界为他自己建立了至尊的地位,”今日美国日报写道。“如今他亦证实了自己是 位完美的艺人....Babyface为这场演唱会缔造了一个最高水准与变化多端 的演出。”1995年1月,新闻周报则写道:“Babyface可能会是流行乐最成 功的词曲作家与制作人....似乎每个人都想拥有一片他破碎的心。”
1995年11月,Babyface首次担纲电影原声带编制的作品《Waiting To Exhale》发行,完成了他认为是"任何词曲作家与制作人都会向往之一生一 次的梦想之一。"原声带收录了16首曲子,全部由Babyface制作,他并依照参与演唱的Whitney Houston,Toni Braxton,Aretha Franklin,Brandy, TLC,Mary J. Blige,SWB以及Patti LaBelle等女歌手团体的个性与特色 ,亲自量身打造了15首歌曲的词曲,如今这张原声带已成为流行榜五周冠 军、R&B 榜10周冠军专辑,销售并已堂堂跨过7百万张的七白金销售纪录。
1996年10月,Babyface发表他继1993年的双白金专辑《For The Cool In You》后的最新作品《The Day》,也是他个人的第四张录音室专辑。《The Day》收录有10首作品,除了首支单曲“This Is For The Lover In You” 是翻唱自Shalamar乐团的1981年名曲外,其余九首作品仍是由Babyface与 人搭档或独力完成。人缘极好的Babyface,在此辑中亦邀来各方好友来与 他共襄盛举,除了白金销售排行Top10名曲“This Is For The Lover In You” 邀来LL Cool J助阵说唱,以及 Jody Watley等三位原 Shalamar团员共同 为他幕后配唱外,还有Mariah Carey献声与Kenny G萨克斯风演奏的另一首 排行Top10金曲“Everytime I Close My Eyes”,Eric Clapton参与吉他 演奏、建立Babyface跨足蓝调乐界地标的“Talk To Me”以及Stevie Wonder 参与填词谱曲与合音、探讨婚姻暴力的“How Come,How Long”。此外, 辑中与专辑标题同名的“The Day (That You Gave Me A Son)”,则是他 为儿子Brandon的出世,献给他妻子Tracey Edmonds(Yab Yum唱片公司的总裁)表达感恩与挚爱的作品,可谓是最能表露他私人情感且动人心弦之 作!"一首情歌中,你能在其旋律中发掘的情感要比词句来得多。"Babyface 在11月5日接受洛杉矶时报的记者Robert Hilburn时便如此说道。"你只能 用一种方式写下'我爱你',但音乐与声音却可以有上百万种的变化,那就 是为什麽我们可以永远写情歌且可以不断发现新方法去诠释的原因。"此辑的排行最高成绩为#6名,并在一年内销售直直突破两百万张。
1997年初,第39届葛莱美奖入围名单揭晓,Babyface一举囊括了12项 大奖的提名,打平了流行天王Michael Jackson所创下的纪录,并于2月26 日的葛莱美奖颁奖典礼上,众望所归地赢得三项大奖。Babyface所获的三 座奖项分别是"年度唱片"(以参与Eric Clapton的Top10单曲“Change The World”之制作而获得),"最佳节奏蓝调歌曲"(为Whitney Houston所谱 写的流行榜与节奏蓝调榜双料冠军电影主题曲“Exhale (Shoop Shoop)”),以及"年度制作人"(因所参与制作的15张专辑入围本届葛莱美奖)。
同样是在1997年间,Babyface亦有了他生平第一次担任电影长片监制的经验,此部片名为"Soul Food",由George Tillman,Jr.所编剧导演, 并交由20世纪福斯电影公司在1997年9月26日上映。此部电影的原声带当然也是由Babyface所担任制作,不仅迅速地获得百万张的白金销售纪录 ,并持续地待在排行榜Top 10以内,并已创造了两首畅销金曲,分别是 Total 的排行#16 作品“What About Us”,以及Milestone的排行 #23作 品“I Care 'Bout You”。
1997年9月25日,Babyface藉着应MTV音乐台Unplugged节目之邀、举 行其首度的原音演唱会之机,特别邀请到一些以往较无机会合作的至亲好 友们,以及多位他心目中最杰出的乐手到场,与他共同营造出一场具有俱 乐部风格般即兴随意且亲切温馨的原音演唱会。于是,Eric Clapton, Stevie Wonder与 Jodeci团中的Jojo,K-Ci兄弟档等巨星挚友,以及Babyface 的两位亲兄弟、亦是着名节奏蓝调团体After 7中的团员Kevon,Melvin… 等,皆到场助阵,众星云集!同年11月25日,Babyface的个人首张演唱会 专辑"MTV Unplugged NYC 1997"发行,此辑的所有内容,便是纪录他在纽 约市曼哈顿中心Hammerstein大会厅所举行的上述之原音演唱会的实况录音 。11首精彩绝伦的作品中, 除了包括《Tender Love 》专辑中的排行#6畅销 曲“Whip Appeal”,双白金销售专辑《The Day》中关怀婚姻暴力中受虐妇 女的“How Come,How Long”,以及感谢他妻子为其添子的 “The Day (You Gave Me A Son)”等4首个人经典代表作外,亦有他藉着此难得的机会,所现场重新演绎的多首由他为多位天王级艺人一手打造出来的畅销曲。这些名闻遐迩的作品分别是Boyz II Men的13与14周超白 金冠军单曲“End Of The Road”“I'll Make Love To You”,Whitney Houston的冠军电影主题曲“Exhale (Shoop Shoop)”,Toni Braxton的 成名代表作“Breathe Again”,Michael Jackson的“Gone Too Sone” 等,另外,还有第39届葛莱美音乐奖"年度歌曲""年度唱片"得主“Change The World”,精彩程度可想而知。
进入98年后的Babyface,除了继续为一些乐坛歌手制作歌曲之外, 他也仍然持续为一些电影担任主题曲及插曲创作或演唱的工作。其中最着 名的作品当属他与英国着名歌手Des'ree对唱的Bruce Springsteen旧作 “Fire”,这首为电影"Hav Plenty"所作的主题曲由两人演绎起来,由 原本的摇滚风格转变为节奏蓝调的轻松气息。
而到年底之时,Babyface推出了他进入歌坛以来的第一张圣诞专辑《Christmas With Babyface》。这张同样由Babyface 担纲制作的专辑,这次还加入了流行乐坛当红制作Walter Afanasieff (Celine Dion、Mariah Carey、Michael Bolton…)的鼎力相助。专 辑收录多首大家耳熟能详的圣诞名曲,像是:“Silent Night”、 “White Christmas”、“The Christmas Song”、“Winter Wonderland” 、“The Little Drummer Boy”…等等。Babyface为这些传唱多年的名曲着上爵士与节奏蓝调色彩的新装,并与多位当前炙手可热的爵士及 蓝调乐手共同合作,为今年的圣诞添加温暖愉悦的气氛。此外,本张专辑还特别多加受录了Babyface为电影"Simon Birch(一路上有你)"所创作、制作、编写及演唱的主题曲“You Were There”,充满温馨的编曲与Babyface柔情的嗓音搭配出细致的多层次感受,与电影的励志温情内容交相呼应,更为今年圣诞节揉入甜蜜贴心的气氛。
Babyface的辉煌之路仍然在继续!
Babyface The Best Great Hits [Disc 1]
Baby Face - I Keep Calling
Baby Face - U Should Know
Baby Face - Still In Love With U
Baby Face - Every Time I Close My Eyes
Baby Face - Change The World
Baby Face - Where Will You Go
Baby Face - When Men Grow Old
Baby Face - I Love You Babe
Baby Face - Soon As I Get Home
Baby Face - This For The Lover In You
Baby Face - How Can U Be Down
Baby Face - Reason For Breathing
Baby Face - How Come,How Long
Baby Face - Whip Appeal
Baby Face - What If
Babyface The Best Great Hits [Disc 2]
Baby Face - It's No Crime
Baby Face - My Kinda Girl
Baby Face - Can't Stop My Heart
Baby Face - Where Will You Go(remix)
Baby Face - Give A Chance
Baby Face - Sunshine
Baby Face - For The Cool In You
Baby Face - Lady Lady
Baby Face - Never Keeping Secrets
Baby Face - Rock Bottom
Baby Face - And Our Feelings
Baby Face - Saturday
Baby Face - When Can I See You
Baby Face - Illusions
Baby Face - A Bit Old-Fashioned
Baby Face - You Are So Beautiful
Baby Face - I'll Always Love You
Babyface可说是现今西洋乐坛数一数二的王牌词曲创作家与制作人,他谱写、制作了无数排行金曲,也获得许多音乐奖的肯定,其中包括了十项葛莱美奖。Babyface不但和Celine Dion、Mariah Carey、Madonna、Whitney Houston、Eric Clapton等知名艺人合作过之外,还捧红了Pebbles、Karyn White、Toni Braxton、TLC等艺人团体。
Babyface职业音乐生涯的滥觞,可追溯至1979年他自组的乐团Manchild,此团录过两张专辑,表现平平。1981年,对Babyface来说,是事业上的转戾点,他加入节奏蓝调团体The Deele,结识团员Antonio "L.A." Reid,从此成为好朋友及工作伙伴。Babyface和Reid两人也为其他艺人写歌、制作,最有名的例子是在1987年为The Whispers打造出"Rock Steady",是该团七年内首支节奏蓝调榜冠军曲及成军以来第一支打进流行榜前十名的歌曲。同年,两人合力的畅销曲"Girlfriend",也使Pebbles的歌唱生涯顺利起飞。
Babyface在1987年发行的个人首张专辑“情人”(Lovers),来自各界的好评开始打响他的知名度。Babyface在这张专辑中用近似假声的唱法,唱出他对爱情的观感。趁着这次的重新发行,专辑中特别收录三首不同版本的"Mary Mack"、"If We Try"和"Lovers",歌迷可以重新回味Babyface的处女作。
Babyface可说是现今西洋乐坛数一数二的王牌词曲创作家与制作人,他谱写、制作了无数排行金曲,也获得许多音乐奖的肯定,其中包括了十项葛莱美奖。Babyface不但和Celine Dion、Mariah Carey、Madonna、Whitney Houston、Eric Clapton等知名艺人合作过之外,还捧红了Pebbles、Karyn White、Toni Braxton、TLC等艺人团体。
Babyface职业音乐生涯的滥觞,可追溯至1979年他自组的乐团Manchild,此团录过两张专辑,表现平平。1981年,对Babyface来说,是事业上的转戾点,他加入节奏蓝调团体The Deele,结识团员Antonio "L.A." Reid,从此成为好朋友及工作伙伴。Babyface和Reid两人也为其他艺人写歌、制作,最有名的例子是在1987年为The Whispers打造出"Rock Steady",是该团七年内首支节奏蓝调榜冠军曲及成军以来第一支打进流行榜前十名的歌曲。同年,两人合力的畅销曲"Girlfriend",也使Pebbles的歌唱生涯顺利起飞。
Babyface在1987年发行的个人首张专辑“情人”(Lovers),来自各界的好评开始打响他的知名度。Babyface在这张专辑中用近似假声的唱法,唱出他对爱情的观感。趁着这次的重新发行,专辑中特别收录三首不同版本的"Mary Mack"、"If We Try"和"Lovers",歌迷可以重新回味Babyface的处女作。
曲目:
1. You Make Me Feel Brand New
2. Lovers
3. Chivalry
4. I Love You Babe
5. Mary Mack
6. Faithful
7. If We Try
8. Take Your Time
9. I Love You Babe (Reprise)
10. Mary Mack - (Free Style mix, bonus track)
11. If We Try - (bonus track, 12" version)
12. Lovers - (Jazz Lover's mix, bonus track)
艺人姓名: 娃娃脸/Babyface
专辑名称: 温柔情人/Tender Lover
Babyface在1989年推出的第二张专辑“温柔情人”(Tender Lover),对大部分的唱片消费者来说,是认识这位顶尖词曲创作者与制作人的一个开始。为了专心于个人的事业,Babyface离开了The Deele,他将之前累积的经验投注在第二张专辑的制作上,在声音的表现上显得更扎实、更有自信,而在内容上,相较于第一张专辑着重于男女间的亲密关系,这张专辑更强调情人彼此心灵的交流。Babyface说,他选择用较冷静的方式展现性感的一面,在当时,他在歌手与制作人这两个身分上,表现已渐趋成熟,所以专辑中不乏有感而发的作品。
专辑的首支单曲"It's No Crime"顺利登上节奏蓝调榜冠军,也使Babyface首次进入流行榜(最高名次为第七名)。第二支单曲"Tender Lover"也成功拿下R&B榜冠军席次,在此同时,Babyface和Reid成立了LaFace唱片公司,隶属于Arista公司,旗下艺人包括TLC及甫获本届葛莱美奖最佳节奏蓝调女歌手的Toni Braxton。之后的两支单曲"Whip Appeal"和"My Kinda Girl"都有相当不错的成绩,其中"Whip Appeal"在流行榜最高名次曾达到第六名。专辑本身则蝉连节奏蓝调专辑榜冠军高达十一周,可以说为Babyface创造了事业的一个高峰。
1. It's No Crime
2. Tender Lover
3. Let's Be Romantic
4. Can't Stop My Heart
5. My Kinda Girl
6. Where Will You Go (Prelude)
7. Whip Appeal
8. Soon As I Get Home
9. Given A Chance
10. Sunshine
11. Where Will You Go
12. Tender Lover - (Dub L.A. mix, bonus track)
13. My Kinda Girl - (bonus track, 12" version)
14. Whip Appeal - (bonus track, 12" version)
艺人姓名: 娃娃脸/Babyface
专辑名称: 只因你太酷/For the Cool in You
1992年,Babyface和老搭档Antonio "L.A." Reid联手为Boyz II Men谱写、制作了畅销单曲"End of the Road",不但蝉连流行单曲榜冠军长达13周,也为他拿下生平首座葛莱美奖(年度制作人、最佳节奏蓝调歌曲)。但Babyface并未因此自满,反而更加认真制作他的第三张专辑,成品就是这张“只因你太酷”(For the Cool in You)。
这张专辑在美国卖出三百多万张,并产生四首单曲,其中最受瞩目的是"When Can I See You"。虽然这支单曲在节奏蓝调榜的成绩不如Babyface以前的单曲亮眼,但是也为他夺得葛莱美奖最佳节奏蓝调男歌手奖,且在流行榜曾高居第四名,证明他不只是能在节奏蓝调界有表现。唱片公司当初对于这支单曲是否会受欢迎而感到怀疑,但是Babyface相当有信心,他认为这首仅用吉他与鼓简单伴奏的歌曲,具有属于它自己的特色,事实证明他是对的。
Babyface喜欢将男性对爱情的想法放在歌曲中,他说,或许男人会感到不自在,但是,这才是女人想要知道的。另外,Babyface还重新诠释Joe Cocker名曲"You Are So Beautiful",并且赋予原曲一番新意。
1. For The Cool In You
2. Lady, Lady
3. Never Keeping Secrets
4. Rock Bottom
5. And Our Feelings
6. Saturday
7. When Can I See You
8. Illusions
9. A Bit Old-Fashioned
10. You Are So Beautiful
11. I'll Always Love You
12. Well Alright
13. For The Cool In You - (Quiet Storm vocal mix, bonus track)
14. When Can I See You - (Urban Soul Basement mix, bonus track)
15. For The Cool In You - (Midnight Luv Instrumental mix)
艺人姓名: 娃娃脸/Babyface
专辑名称: 醉情歌/LOVE SONG
相信许多人都同意,俊俏乾净的脸孔、一身黑服装扮的Babyface可能是九零年代最具影响力,同时也是最令乐迷喜爱的黑人都会灵魂歌手了,他的嗓音细腻温柔,使得他唱起情歌来格外令女性乐迷倾倒。
Babyface早期是从美国中部辛辛那提崛起的歌手,但由于他的才华出众,使得他在很短时间内就取得了为当时如Sheena Easton、Paula Ab
‘贰’ TS使用教程(寒冰王朝)
TS服务器, 全国唯一的三线TS服务器
www.ts8088.cn
今天开始,凡本家族成员务必使用TS语音插件,此插件方便于家族里面的管理以及交流,而且不会影响你的
网速,在使用TS过程中如有疑问 请找 名字后有 SA 的服务器管理员咨询!
TS服务器地址:124.193.254.151:8767
TS软件下载:http://www.qygh.cn/ts.rar
服务器:
打开TS软件.点击连接→连接→输入服务器地址还有你注册的帐号密码(提示第一次进入不需要用户名和密
码.直接蔑名进入.代连接后管理员给你注册好了.在打用户名和密码进入.)
服务器:124.193.254.151:8767
昵称:前面加 寒冰x后面是游戏中的ID
登陆名:(在TS注册的帐号)没有注册就不要写
密码:(在TS注册的帐号密码)没有注册就不要写
填好后按下连接
进入TS后请点击设置→声音输入/输出设置→在 按键聊天 前面打上·→点一右边哪个 设置 →按下Alt(
或其他键都可以)然后关闭. (当你想说话的时候,你可以按住Alt就可以说话了,说完话记得要松开手哦!)
‘叁’ ftp如何实现自动下载
CuteFTP
下载:http://www.mydown.com/soft/29/29512.html
汉化:http://www.mydown.com/soft/202/202959.html
使用方法
双击桌面上的CuteFTP快捷图标,启动CuteFTP程序。第一卧诵谢嶙远��鲵TP Site Manager(FTP网站管理者)的对话框,如图1所示,后面再详细介绍。先点“Exit”退出。回到主程序界面进行必要的设置。
程序主界面
主界面分为四个主要部分,如图2所示。
1.命令区域(工具栏和菜单):这是FTP站对使用者显示的信息区,由这里可了解到该站信息,是否支持续传,正在传送什么文件,是否已经断线等当前连接状况。
常用的CuteFTP功能按钮(如图3所示)介绍如下:
A:Site Manager--调用FTP Site Manager;
B:Quick Connect--快速连接。对于一个新的FTP站,可以连上看看,如符合需要,点击Session / Add to database,取一个站名,便可将它加入 “FTP Site Manager”中进行详细编辑设置;
C:Disconnect--中断连接;
D:Reconnect--重新连接;
E:Upload--上传文件;
F:Download--下载文件;
G:Short Directory Listing--只列出文件及目录名称;
H:Long Directory Listing--完整列出文件及目录的详细资料,这样可以在传完文件后,比较本地硬盘的文件大小与FTP站上的文件大小是否一致。如果不一致,则要续传完整才行;
I、J、K:批处理功能组合键; L:View--检视功能,只是用于文本文件;
M:Execute--执行文件。但不要轻易对FTP站中的文件进行执行操作,这样会影响速度。 N:Edit--编辑远程区域中的文件;
O:Rename Files--对文件重新命名;
P:Make new directory--建立新目录;
Q:Refresh--刷新。重新整理当前目录中的文件,在比较文件大小前,最好先刷新一下;
R:Stop--立即中断文件传输。
2.本地区域(本地硬盘):显示本地计算机的硬盘中要上传(Upload)或下载(Download)的所在目录及相关文件。
3.远程区域(远端服务器):显示FTP站的内容。
4.批处理、记录区域:观看文件传输的进程。可先把本地或远程区域中的需要文件拖到这个窗口中,再决定是否传输。
设 置 篇
选择下拉菜单的FTP项,选Settings / Options,出现一个有五个标签的对话框。
1.“General”标签(如图4所示):
Mail Address:填入你的E-mail账号,用作匿名登录FTP站时的password。
Default Download Directory:预设下载文件存放目录,如单独创建一个目录,会便于整理。
Text Files Viewer:文本文件的检视工具。默认打开程序为“记事本”,也可以点击右边的“…”按钮,选择其他文本编辑软件。
Log File:记录传送文件的过程资料。
Max safe index size:Index是指站点说明文件。这里设定index文件大小如果超过指定KB(预设10KB),即询问是否下载。
Default Retry:设定如果因为FTP站忙而没接上,程序会自动连接n次,预设值为20。 Start:启动CuteFTP后使用哪种模式。预设为Site Manager(建议使用模式);
Quick Connect为快速连接;Nothing是直接进入CuteFTP的主程序工作窗口。
2.“Advanced”标签(如图5所示)。
Double-click Action:设定双击鼠标左键执行什么命令。预设为Transfer,即开始传输文件(建议);
Execute是执行文件(最好别用,除非你很有把握不会出错);View是查看文件,只对文本文件有效;Nothing是什么都不执行。
“Receive”和“Sand”是指接收缓冲区和传送缓冲区的大小。如果在传输文件时非常缓慢,不妨试试把两项都加大到16000。
3.“Display”标签(如图6所示)。
Tool Bar: 选择“Big Buttons”会使用大的功能键,这样看上去会醒目很多,不容易点错,这项功能很体贴常在网上泡得头晕眼花的虫虫们。
Customize:可以像Office97一样任意增减功能键,排列成自己习惯的菜单。 Select Font:设定显示字形的样式及大小。
Colors:显示讯息及字形颜色。 Reset to defaults:恢复默认的设定值。
4.“Prompts”和“Firewall”标签(如图7、图8所示): 关于操作提示和防火墙的设定,普通用户使用预设值就行了。
使 用 篇
单击按钮,开启FTP Site Manager。CuteFTP收集了很多着名的FTP站点地址,用鼠标在“Anonymous FTP Sites”文件夹中选择你想连接的站点,单击“Connect”即可连接了。如果想新增一个FTP站点,则单击“Add Site”,会弹出如图9所示的对话框。
1.Site Label:任意填写站名,它起到一个标题作用。如填上笔者的“红帆船电脑网络工作室”。
2.Host Address:填入FTP服务器的IP地址或域名,例如免费主页在太阳城,就要填上它的IP地址:202.98.35.14。注意不要用ftp://或http://开头。
3.User ID:填写你的用户名,Password中填写密码。
4.Login type(登录类型):选择“Normal”(正常)。很多公用的FTP网站,选用“anonymous”(匿名)登录,用自己的信箱账号当password即可。
5.Initial Remote Directory:填上你想登录FTP服务器后直接进入那级目录,如果上传个人主页,一般是用“\你的用户名”路径;Initial Local Directory:填上你想传输的文件在自己硬盘中的目录,当然不填也可以。
6.Transfer type:文件上传模式设定。 FTP可以用多种格式传输文件,常用的是文本模式和二进制模式。文本传输使用ASCII字符,而二进制则无须转换或格式化即可传输字符,因此比文本模式更快,并且可以传输所有ASCII值。要注意确保使用正确的传输模式传输文件,按文本模式传二进制文件将会导致错误。一般我们选“Auto-Detect”即可,它会自行检测文件类型并使用最适合的上传方式。
7.点击“确认”,程序回到图10的界面,此时“红帆船电脑网络工作室”已经出现在右边的框中。选择此标题,单击“Connect”,即可连入服务器(前提当然是你的电脑处于在线状态,如果不在线,CuteFTP会自动调用联接上网的程序)。远端服务器“验身”之后,弹出对话框(如图10所示),单击“OK”,进入程序主界面,便可以传送文件了。
六、如何上传、下载文件
1.在本地硬盘选取一个或多个要上传的文件,在远程区域中进入欲将文件送至的目录。 单击工具栏上的上传图标,或者用鼠标直接将选取文件拖曳过去,文件便开始上传。当命令区域中提示DONE,即表示上传完毕。
2.当遇到只需要上传所有jpg文件等情况时,可以在菜单中选取“Directory/Group select”,在弹出的对话框中输入想选取的文件通配符,如图11所示。该功能支持文件通配符“*”和“?”的用法。
3.CuteFTP2.8支持整个目录的上传或下载,操作方法与传送单一文件是一样的。但有时网站需要增加目录,可选择菜单中的“Commands / Make new directory”,或单击鼠标右键点选“Make new directory”项。在弹出的对话框中输入新目录名即可。如图12所示。
下载文件与此相似。
传送文件时,会经常在本地区域或远程区域中点击鼠标右键,弹出常用操作的功能菜单:
Delete:删除被选中的文件;
Rename:对被选中的文件重命名;
Change file attributes:修改远程区域中被选中的文件属性。这一项对于CGI文件很重要。点击此项,将弹出如图13所示的对话框,具体设置方法可参考帮助文件。
Make new dir:建立文件夹(目录);
Refresh:刷新。
技 巧 篇
1.注意文件名称的大小写。因为大多数远程服务器,对于文件或目录名的大小写非常敏感。如果FTP软件中没有强制小写字母的功能,就要注意文件及目录名要用小写。在CuteFTP中,在FTP Site Manager / Edit Site / Advanced的Upload Filenames中选择Force Lowercase(强制小写),可以强制实现上传文件名称为小写。如图14所示。
2.正确设置本地及远程目录。在CuteFTP中设置好本地及远程目录的路径,登录后将自动进入指定目录中,就马上可以进行文件传送了,能节省很多切换目录的时间。注意本地目录路径是用“\”格式,而在远程目录路径使用的是“/”格式,因为大部分的服务器都是UNIX系统。对于常用的目录,应将它加到Bookmarks书签中。
3.进入某站点时候盯着注意信息窗,如果显示了“This site can resume broken downloads”,即表示支持续传功能。
4.CuteFTP的目录下的smdata.dat文件,记录了“FTP Site Manager”中各网站的信息,应该定期备份。如果“FTP Site Manager”损失,或者重装了CuteFTP,将此文件复制回去,就不用再编辑一大堆的FTP站了。此外还应备份四个重要的文件:cuteftp.key、 commands.dat、 bookmark.dat、 autoname.dat。
5.传送文件结束后,在FTP Site Manager中,不要将Password保留,容易被别人利用。
6.CuteFTP是共享软件,有很多功能需要注册才能使用。
7.CuteFTP 2.8已经解决了Y2K问题,但注意不要将系统日期设定到2037年之后。
8.如果CuteFTP一切设置正常,但传输文件还是非常慢或者只能传输部分文件便停止,请在Windows的system.ini中加上[VNTSPSD]MaxFrameSize=3D1000,然后重启计算机。或到下列站点下载系统修正程序: http://www.sns-access.com/~netpro/maxmtu.htm http://www.microsoft.com/windows95/info/krnlupd.htm
8、可按如下步骤显示远程区域的隐含目录:在FTP Site Manager选Edit site编辑某个站点。在“Remote Directory”项中输入“-rtaF”,并且不要复选“Local Filter”项。
‘肆’ 关于如何实现FTP上传或者下载带进度和速率的实现方法
在这里需要说明的是,该方式是通过其他代码进行改进的。 首先我们需要定义一个委托,用来实现传输过程中传递文件的总数,已完成的字节数和速度,方便客户端界面上调用。 public delegate void TransferProcess(long total,long finished,double speed); 调用代码就不举例了 接下来我们建立一个FTPClient类,该类基于socket和FTP协议实现了连接FTP服务,建立目录,上传文件,下载文件等主要方法。结构如下: 需要注意的是,我们需要定一个事件event TransferProcess OnTransferProcess;该事件在实例化FTPClient之后需要调用,这个事件对实现进度条和速率是非常重要的。为了实现速率我们还需要定义个公开的成员startTime(开始时间)。我们现在主要是看一下如何上传的。 /// /// 上传一个文件 /// /// 本地文件名 public void Put(string strFileName) { //连接服务器 if (!bConnected) { Connect(); } UpdateStatus = true; //建立socket连接 Socket socketData = CreateDataSocket(); //向FTP服务器发生存储命令 SendCommand("STOR " + Path.GetFileName(strFileName)); //如何服务器返回的信息不是我们所需要的,就抛出异常 if (!(iReplyCode == 125 || iReplyCode == 150)) { throw new IOException(strReply.Substring(4)); } //建立本地文件的数据流 FileStream input = new FileStream(strFileName, FileMode.Open); int iBytes = 0; long total = input.Length;//该成员主要记录文件的总字节数,注意这里使用长整型,是为了突破只能传输2G左右的文件的限制 long finished = 0;//该成员主要记录已经传输完成的字节数,注意这里使用长整型,是为了突破只能传输2G左右的文件的限制 double speed = 0;//记录传输的速率 while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0)//循环从本地数据流中读取数据到缓冲区 { //Console.WriteLine(startTime.ToString()); socketData.Send(buffer, iBytes, 0);//将缓冲区的数据发送到FTP服务器 DateTime endTime = DateTime.Now;//每次发送数据的结束时间 TimeSpan ts = endTime - startTime;//计算每次发送数据的时间间隔 finished += iBytes;//计算完成的字节数. Console.WriteLine(ts.Milliseconds); //计算速率,注意finished是字节,所以需要换算冲K字节 if (ts.Milliseconds > 0) { speed = (double)(finished / ts.TotalMilliseconds); speed = Math.Round(speed * 1000 / 1024, 2); } //这里是必不可少的,否则你无法实现进度条 //如果传输进度事件被实例化,而且从本地数据流中读取数据不是空的并完成的字节数也不为空的话,则实现委托. if (OnTransferProcess != null&&iBytes>0&&finished>0) { OnTransferProcess(total, finished,speed); } } UpdateStatus = false; finished = 0; input.Close();//当传输完成之后需要关闭数据流,以便下次访问. if (socketData.Connected) { socketData.Close();//关闭当前的socket } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { UpdateStatus = false; throw new IOException(strReply.Substring(4)); } } } 上面代码中注释写得比较详细,这里就不再一一讲解了,关于下载中实现进度条和速率的问题可以参考以上代码进行修改. 完整的代码如下: using System; using System.net; using System.IO; using System.Text; using System.net.Sockets; namespace MMSEncoder { public delegate void TransferProcess(long total,long finished,double speed); /// /// FTP Client /// public class FTPClient { public event TransferProcess OnTransferProcess; public bool UpdateStatus = true; public DateTime startTime; private bool IsAbortConnect = false; #region 构造函数 /// /// 缺省构造函数 /// public FTPClient() { strRemoteHost = ""; strRemotePath = ""; strRemoteUser = ""; strRemotePass = ""; strRemotePort = 21; bConnected = false; } /// /// 构造函数 /// /// FTP服务器IP地址 /// 当前服务器目录 /// 登录用户账号 /// 登录用户密码 /// FTP服务器端口 public FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort) { strRemoteHost = remoteHost; strRemotePath = remotePath; strRemoteUser = remoteUser; strRemotePass = remotePass; strRemotePort = remotePort; Connect(); } #endregion #region 登陆字段、属性 /// /// FTP服务器IP地址 /// private string strRemoteHost; public string RemoteHost { get { return strRemoteHost; } set { strRemoteHost = value; } } /// /// FTP服务器端口 /// private int strRemotePort; public int RemotePort { get { return strRemotePort; } set { strRemotePort = value; } } /// /// 当前服务器目录 /// private string strRemotePath; public string RemotePath { get { return strRemotePath; } set { strRemotePath = value; } } /// /// 登录用户账号 /// private string strRemoteUser; public string RemoteUser { set { strRemoteUser = value; } } /// /// 用户登录密码 /// private string strRemotePass; public string RemotePass { set { strRemotePass = value; } } /// /// 是否登录 /// private Boolean bConnected; public bool Connected { get { return bConnected; } } #endregion #region 链接 /// /// 建立连接 /// public void Connect() { //if (IsAbortConnect) throw new IOException("用户强制终止了FTP"); socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort); // 链接 try { socketControl.Connect(ep); } catch (Exception) { throw new IOException("无法连接到远程服务器!"); } // 获取应答码 ReadReply(); if (iReplyCode != 220) { DisConnect(); throw new IOException(strReply.Substring(4)); } // 登陆 SendCommand("USER " + strRemoteUser); if (!(iReplyCode == 331 || iReplyCode == 230)) { CloseSocketConnect();//关闭连接 throw new IOException(strReply.Substring(4)); } if (iReplyCode != 230) { SendCommand("PASS " + strRemotePass); if (!(iReplyCode == 230 || iReplyCode == 202)) { CloseSocketConnect();//关闭连接 throw new IOException(strReply.Substring(4)); } } bConnected = true; // 切换到初始目录 if (!string.IsNullOrEmpty(strRemotePath)) { ChDir(strRemotePath); } } /// /// 关闭连接 /// public void DisConnect() { if (socketControl != null) { SendCommand("QUIT"); } CloseSocketConnect(); } public void AbortConnect() { if (socketControl != null) { SendCommand("ABOR"); } IsAbortConnect = true; //CloseSocketConnect(); } #endregion #region 传输模式 /// /// 传输模式:二进制类型、ASCII类型 /// public enum TransferType { Binary, ASCII }; /// /// 设置传输模式 /// /// 传输模式 public void SetTransferType(TransferType ttType) { if (ttType == TransferType.Binary) { SendCommand("TYPE I");//binary类型传输 } else { SendCommand("TYPE A");//ASCII类型传输 } if (iReplyCode != 200) { throw new IOException(strReply.Substring(4)); } else { trType = ttType; } } /// /// 获得传输模式 /// /// 传输模式 public TransferType GetTransferType() { return trType; } #endregion #region 文件操作 /// /// 获得文件列表 /// /// 文件名的匹配字符串 /// public string[] Dir(string strMask) { // 建立链接 if (!bConnected) { Connect(); } //建立进行数据连接的socket Socket socketData = CreateDataSocket(); //传送命令 SendCommand("NLST " + strMask); //分析应答代码 if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226)) { throw new IOException(strReply.Substring(4)); } //获得结果 strMsg = ""; while (true) { int iBytes = socketData.Receive(buffer, buffer.Length, 0); strMsg += GB2312.GetString(buffer, 0, iBytes); if (iBytes < buffer.Length) { break; } } char[] seperator = { '\n' }; string[] strsFileList = strMsg.Split(seperator); socketData.Close();//数据socket关闭时也会有返回码 if (iReplyCode != 226) { ReadReply(); if (iReplyCode != 226) { throw new IOException(strReply.Substring(4)); } } return strsFileList; } /// /// 获取文件大小 /// /// 文件名 /// 文件大小 public long GetFileSize(string strFileName) { if (!bConnected) { Connect(); } SendCommand("SIZE " + Path.GetFileName(strFileName)); long lSize = 0; if (iReplyCode == 213) { lSize = Int64.Parse(strReply.Substring(4)); } else { throw new IOException(strReply.Substring(4)); } return lSize; } /// /// 删除 /// /// 待删除文件名 public void Delete(string strFileName) { if (!bConnected) { Connect(); } SendCommand("DELE " + strFileName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } /// /// 重命名(如果新文件名与已有文件重名,将覆盖已有文件) /// /// 旧文件名 /// 新文件名 public void Rename(string strOldFileName, string strNewFileName) { if (!bConnected) { Connect(); } SendCommand("RNFR " + strOldFileName); if (iReplyCode != 350) { throw new IOException(strReply.Substring(4)); } // 如果新文件名与原有文件重名,将覆盖原有文件 SendCommand("RNTO " + strNewFileName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } #endregion #region 上传和下载 /// /// 下载一批文件 /// /// 文件名的匹配字符串 /// 本地目录(不得以\结束) public void Get(string strFileNameMask, string strFolder) { if (!bConnected) { Connect(); } string[] strFiles = Dir(strFileNameMask); foreach (string strFile in strFiles) { if (!strFile.Equals(""))//一般来说strFiles的最后一个元素可能是空字符串 { if (strFile.LastIndexOf(".") > -1) { Get(strFile.Replace("\r", ""), strFolder, strFile.Replace("\r", "")); } } } } /// /// 下载一个文件 /// /// 要下载的文件名 /// 本地目录(不得以\结束) /// 保存在本地时的文件名 public void Get(string strRemoteFileName, string strFolder, string strLocalFileName) { if (!bConnected) { Connect(); } SetTransferType(TransferType.Binary); if (strLocalFileName.Equals("")) { strLocalFileName = strRemoteFileName; } if (!File.Exists(strLocalFileName)) { Stream st = File.Create(strLocalFileName); st.Close(); } FileStream output = new FileStream(strFolder + "\\" + strLocalFileName, FileMode.Create); Socket socketData = CreateDataSocket(); SendCommand("RETR " + strRemoteFileName); if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226 || iReplyCode == 250)) { throw new IOException(strReply.Substring(4)); } while (true) { int iBytes = socketData.Receive(buffer, buffer.Length, 0); output.Write(buffer, 0, iBytes); if (iBytes 0) { Console.WriteLine(startTime.ToString()); socketData.Send(buffer, iBytes, 0); DateTime endTime = DateTime.Now; TimeSpan ts = endTime - startTime; finished += iBytes; Console.WriteLine(ts.Milliseconds); if (ts.Milliseconds > 0) { speed = (double)(finished / ts.TotalMilliseconds); speed = Math.Round(speed * 1000 / 1024, 2); } if (OnTransferProcess != null&&iBytes>0&&finished>0) { OnTransferProcess(total, finished,speed); } } UpdateStatus = false; finished = 0; input.Close(); if (socketData.Connected) { socketData.Close(); } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { UpdateStatus = false; throw new IOException(strReply.Substring(4)); } } } #endregion #region 目录操作 /// /// 创建目录 /// /// 目录名 public void MkDir(string strDirName) { if (!bConnected) { Connect(); } SendCommand("MKD " + strDirName); if (iReplyCode != 257) { throw new IOException(strReply.Substring(4)); } } /// /// 删除目录 /// /// 目录名 public void RmDir(string strDirName) { if (!bConnected) { Connect(); } SendCommand("RMD " + strDirName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } /// /// 改变目录 /// /// 新的工作目录名 public void ChDir(string strDirName) { if (strDirName.Equals(".") || strDirName.Equals("")) { return; } if (!bConnected) { Connect(); } SendCommand("CWD " + strDirName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } this.strRemotePath = strDirName; } #endregion #region 内部变量 /// /// 服务器返回的应答信息(包含应答码) /// private string strMsg; /// /// 服务器返回的应答信息(包含应答码) /// private string strReply; /// /// 服务器返回的应答码 /// private int iReplyCode; /// /// 进行控制连接的socket /// private Socket socketControl; /// /// 传输模式 /// private TransferType trType; /// /// 接收和发送数据的缓冲区 /// private static int BLOCK_SIZE = Int16.MaxValue; Byte[] buffer = new Byte[BLOCK_SIZE]; /// /// 编码方式(为防止出现中文乱码采用 GB2312编码方式) /// Encoding GB2312 = Encoding.Default ;//Encoding.GetEncoding("gb2312"); #endregion #region 内部函数 /// /// 将一行应答字符串记录在strReply和strMsg /// 应答码记录在iReplyCode /// private void ReadReply() { strMsg = ""; strReply = ReadLine(); iReplyCode = Int32.Parse(strReply.Substring(0, 3)); } /// /// 建立进行数据连接的socket /// /// 数据连接socket private Socket CreateDataSocket() { SendCommand("PASV"); if (iReplyCode != 227) { throw new IOException(strReply.Substring(4)); } int index1 = strReply.IndexOf('('); int index2 = strReply.IndexOf(')'); string ipData = strReply.Substring(index1 + 1, index2 - index1 - 1); int[] parts = new int[6]; int len = ipData.Length; int partCount = 0; string buf = ""; for (int i = 0; i < len && partCount
‘伍’ 关于如何实现FTP上传或者下载带进度和速率的实现方法
在这里需要说明的是,该方式是通过其他代码进行改进的。 首先我们需要定义一个委托,用来实现传输过程中传递文件的总数,已完成的字节数和速度,方便客户端界面上调用。 public delegate void TransferProcess(long total,long finished,double speed); 调用代码就不举例了 接下来我们建立一个FTPClient类,该类基于socket和FTP协议实现了连接FTP服务,建立目录,上传文件,下载文件等主要方法。结构如下: 需要注意的是,我们需要定一个事件event TransferProcess OnTransferProcess;该事件在实例化FTPClient之后需要调用,这个事件对实现进度条和速率是非常重要的。为了实现速率我们还需要定义个公开的成员startTime(开始时间)。我们现在主要是看一下如何上传的。 /// /// 上传一个文件 /// /// 本地文件名 public void Put(string strFileName) { //连接服务器 if (!bConnected) { Connect(); } UpdateStatus = true; //建立socket连接 Socket socketData = CreateDataSocket(); //向FTP服务器发生存储命令 SendCommand("STOR " + Path.GetFileName(strFileName)); //如何服务器返回的信息不是我们所需要的,就抛出异常 if (!(iReplyCode == 125 || iReplyCode == 150)) { throw new IOException(strReply.Substring(4)); } //建立本地文件的数据流 FileStream input = new FileStream(strFileName, FileMode.Open); int iBytes = 0; long total = input.Length;//该成员主要记录文件的总字节数,注意这里使用长整型,是为了突破只能传输2G左右的文件的限制 long finished = 0;//该成员主要记录已经传输完成的字节数,注意这里使用长整型,是为了突破只能传输2G左右的文件的限制 double speed = 0;//记录传输的速率 while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0)//循环从本地数据流中读取数据到缓冲区 { //Console.WriteLine(startTime.ToString()); socketData.Send(buffer, iBytes, 0);//将缓冲区的数据发送到FTP服务器 DateTime endTime = DateTime.Now;//每次发送数据的结束时间 TimeSpan ts = endTime - startTime;//计算每次发送数据的时间间隔 finished += iBytes;//计算完成的字节数. Console.WriteLine(ts.Milliseconds); //计算速率,注意finished是字节,所以需要换算冲K字节 if (ts.Milliseconds > 0) { speed = (double)(finished / ts.TotalMilliseconds); speed = Math.Round(speed * 1000 / 1024, 2); } //这里是必不可少的,否则你无法实现进度条 //如果传输进度事件被实例化,而且从本地数据流中读取数据不是空的并完成的字节数也不为空的话,则实现委托. if (OnTransferProcess != null&&iBytes>0&&finished>0) { OnTransferProcess(total, finished,speed); } } UpdateStatus = false; finished = 0; input.Close();//当传输完成之后需要关闭数据流,以便下次访问. if (socketData.Connected) { socketData.Close();//关闭当前的socket } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { UpdateStatus = false; throw new IOException(strReply.Substring(4)); } } } 上面代码中注释写得比较详细,这里就不再一一讲解了,关于下载中实现进度条和速率的问题可以参考以上代码进行修改. 完整的代码如下: using System; using System.net; using System.IO; using System.Text; using System.net.Sockets; namespace MMSEncoder { public delegate void TransferProcess(long total,long finished,double speed); /// /// FTP Client /// public class FTPClient { public event TransferProcess OnTransferProcess; public bool UpdateStatus = true; public DateTime startTime; private bool IsAbortConnect = false; #region 构造函数 /// /// 缺省构造函数 /// public FTPClient() { strRemoteHost = ""; strRemotePath = ""; strRemoteUser = ""; strRemotePass = ""; strRemotePort = 21; bConnected = false; } /// /// 构造函数 /// /// FTP服务器IP地址 /// 当前服务器目录 /// 登录用户账号 /// 登录用户密码 /// FTP服务器端口 public FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort) { strRemoteHost = remoteHost; strRemotePath = remotePath; strRemoteUser = remoteUser; strRemotePass = remotePass; strRemotePort = remotePort; Connect(); } #endregion #region 登陆字段、属性 /// /// FTP服务器IP地址 /// private string strRemoteHost; public string RemoteHost { get { return strRemoteHost; } set { strRemoteHost = value; } } /// /// FTP服务器端口 /// private int strRemotePort; public int RemotePort { get { return strRemotePort; } set { strRemotePort = value; } } /// /// 当前服务器目录 /// private string strRemotePath; public string RemotePath { get { return strRemotePath; } set { strRemotePath = value; } } /// /// 登录用户账号 /// private string strRemoteUser; public string RemoteUser { set { strRemoteUser = value; } } /// /// 用户登录密码 /// private string strRemotePass; public string RemotePass { set { strRemotePass = value; } } /// /// 是否登录 /// private Boolean bConnected; public bool Connected { get { return bConnected; } } #endregion #region 链接 /// /// 建立连接 /// public void Connect() { //if (IsAbortConnect) throw new IOException("用户强制终止了FTP"); socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort); // 链接 try { socketControl.Connect(ep); } catch (Exception) { throw new IOException("无法连接到远程服务器!"); } // 获取应答码 ReadReply(); if (iReplyCode != 220) { DisConnect(); throw new IOException(strReply.Substring(4)); } // 登陆 SendCommand("USER " + strRemoteUser); if (!(iReplyCode == 331 || iReplyCode == 230)) { CloseSocketConnect();//关闭连接 throw new IOException(strReply.Substring(4)); } if (iReplyCode != 230) { SendCommand("PASS " + strRemotePass); if (!(iReplyCode == 230 || iReplyCode == 202)) { CloseSocketConnect();//关闭连接 throw new IOException(strReply.Substring(4)); } } bConnected = true; // 切换到初始目录 if (!string.IsNullOrEmpty(strRemotePath)) { ChDir(strRemotePath); } } /// /// 关闭连接 /// public void DisConnect() { if (socketControl != null) { SendCommand("QUIT"); } CloseSocketConnect(); } public void AbortConnect() { if (socketControl != null) { SendCommand("ABOR"); } IsAbortConnect = true; //CloseSocketConnect(); } #endregion #region 传输模式 /// /// 传输模式:二进制类型、ASCII类型 /// public enum TransferType { Binary, ASCII }; /// /// 设置传输模式 /// /// 传输模式 public void SetTransferType(TransferType ttType) { if (ttType == TransferType.Binary) { SendCommand("TYPE I");//binary类型传输 } else { SendCommand("TYPE A");//ASCII类型传输 } if (iReplyCode != 200) { throw new IOException(strReply.Substring(4)); } else { trType = ttType; } } /// /// 获得传输模式 /// /// 传输模式 public TransferType GetTransferType() { return trType; } #endregion #region 文件操作 /// /// 获得文件列表 /// /// 文件名的匹配字符串 /// public string[] Dir(string strMask) { // 建立链接 if (!bConnected) { Connect(); } //建立进行数据连接的socket Socket socketData = CreateDataSocket(); //传送命令 SendCommand("NLST " + strMask); //分析应答代码 if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226)) { throw new IOException(strReply.Substring(4)); } //获得结果 strMsg = ""; while (true) { int iBytes = socketData.Receive(buffer, buffer.Length, 0); strMsg += GB2312.GetString(buffer, 0, iBytes); if (iBytes < buffer.Length) { break; } } char[] seperator = { '
' }; string[] strsFileList = strMsg.Split(seperator); socketData.Close();//数据socket关闭时也会有返回码 if (iReplyCode != 226) { ReadReply(); if (iReplyCode != 226) { throw new IOException(strReply.Substring(4)); } } return strsFileList; } /// /// 获取文件大小 /// /// 文件名 /// 文件大小 public long GetFileSize(string strFileName) { if (!bConnected) { Connect(); } SendCommand("SIZE " + Path.GetFileName(strFileName)); long lSize = 0; if (iReplyCode == 213) { lSize = Int64.Parse(strReply.Substring(4)); } else { throw new IOException(strReply.Substring(4)); } return lSize; } /// /// 删除 /// /// 待删除文件名 public void Delete(string strFileName) { if (!bConnected) { Connect(); } SendCommand("DELE " + strFileName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } /// /// 重命名(如果新文件名与已有文件重名,将覆盖已有文件) /// /// 旧文件名 /// 新文件名 public void Rename(string strOldFileName, string strNewFileName) { if (!bConnected) { Connect(); } SendCommand("RNFR " + strOldFileName); if (iReplyCode != 350) { throw new IOException(strReply.Substring(4)); } // 如果新文件名与原有文件重名,将覆盖原有文件 SendCommand("RNTO " + strNewFileName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } #endregion #region 上传和下载 /// /// 下载一批文件 /// /// 文件名的匹配字符串 /// 本地目录(不得以\结束) public void Get(string strFileNameMask, string strFolder) { if (!bConnected) { Connect(); } string[] strFiles = Dir(strFileNameMask); foreach (string strFile in strFiles) { if (!strFile.Equals(""))//一般来说strFiles的最后一个元素可能是空字符串 { if (strFile.LastIndexOf(".") > -1) { Get(strFile.Replace("\r", ""), strFolder, strFile.Replace("\r", "")); } } } } /// /// 下载一个文件 /// /// 要下载的文件名 /// 本地目录(不得以\结束) /// 保存在本地时的文件名 public void Get(string strRemoteFileName, string strFolder, string strLocalFileName) { if (!bConnected) { Connect(); } SetTransferType(TransferType.Binary); if (strLocalFileName.Equals("")) { strLocalFileName = strRemoteFileName; } if (!File.Exists(strLocalFileName)) { Stream st = File.Create(strLocalFileName); st.Close(); } FileStream output = new FileStream(strFolder + "\\" + strLocalFileName, FileMode.Create); Socket socketData = CreateDataSocket(); SendCommand("RETR " + strRemoteFileName); if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226 || iReplyCode == 250)) { throw new IOException(strReply.Substring(4)); } while (true) { int iBytes = socketData.Receive(buffer, buffer.Length, 0); output.Write(buffer, 0, iBytes); if (iBytes <= 0) { break; } } output.Close(); if (socketData.Connected) { socketData.Close(); } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { throw new IOException(strReply.Substring(4)); } } } /// /// 上传一批文件 /// /// 本地目录(不得以\结束) /// 文件名匹配字符(可以包含*和?) public void Put(string strFolder, string strFileNameMask) { string[] strFiles = Directory.GetFiles(strFolder, strFileNameMask); foreach (string strFile in strFiles) { //strFile是完整的文件名(包含路径) Put(strFile); } } /// /// 上传一个文件 /// /// 本地文件名 public void Put(string strFileName) { if (!bConnected) { Connect(); } UpdateStatus = true; Socket socketData = CreateDataSocket(); SendCommand("STOR " + Path.GetFileName(strFileName)); if (!(iReplyCode == 125 || iReplyCode == 150)) { throw new IOException(strReply.Substring(4)); } FileStream input = new FileStream(strFileName, FileMode.Open); int iBytes = 0; long total = input.Length; long finished = 0; //DateTime startTime = DateTime.Now; double speed = 0; while ((iBytes = input.Read(buffer, 0, buffer.Length)) > 0) { Console.WriteLine(startTime.ToString()); socketData.Send(buffer, iBytes, 0); DateTime endTime = DateTime.Now; TimeSpan ts = endTime - startTime; finished += iBytes; Console.WriteLine(ts.Milliseconds); if (ts.Milliseconds > 0) { speed = (double)(finished / ts.TotalMilliseconds); speed = Math.Round(speed * 1000 / 1024, 2); } if (OnTransferProcess != null&&iBytes>0&&finished>0) { OnTransferProcess(total, finished,speed); } } UpdateStatus = false; finished = 0; input.Close(); if (socketData.Connected) { socketData.Close(); } if (!(iReplyCode == 226 || iReplyCode == 250)) { ReadReply(); if (!(iReplyCode == 226 || iReplyCode == 250)) { UpdateStatus = false; throw new IOException(strReply.Substring(4)); } } } #endregion #region 目录操作 /// /// 创建目录 /// /// 目录名 public void MkDir(string strDirName) { if (!bConnected) { Connect(); } SendCommand("MKD " + strDirName); if (iReplyCode != 257) { throw new IOException(strReply.Substring(4)); } } /// /// 删除目录 /// /// 目录名 public void RmDir(string strDirName) { if (!bConnected) { Connect(); } SendCommand("RMD " + strDirName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } } /// /// 改变目录 /// /// 新的工作目录名 public void ChDir(string strDirName) { if (strDirName.Equals(".") || strDirName.Equals("")) { return; } if (!bConnected) { Connect(); } SendCommand("CWD " + strDirName); if (iReplyCode != 250) { throw new IOException(strReply.Substring(4)); } this.strRemotePath = strDirName; } #endregion #region 内部变量 /// /// 服务器返回的应答信息(包含应答码) /// private string strMsg; /// /// 服务器返回的应答信息(包含应答码) /// private string strReply; /// /// 服务器返回的应答码 /// private int iReplyCode; /// /// 进行控制连接的socket /// private Socket socketControl; /// /// 传输模式 /// private TransferType trType; /// /// 接收和发送数据的缓冲区 /// private static int BLOCK_SIZE = Int16.MaxValue; Byte[] buffer = new Byte[BLOCK_SIZE]; /// /// 编码方式(为防止出现中文乱码采用 GB2312编码方式) /// Encoding GB2312 = Encoding.Default ;//Encoding.GetEncoding("gb2312"); #endregion #region 内部函数 /// /// 将一行应答字符串记录在strReply和strMsg /// 应答码记录在iReplyCode /// private void ReadReply() { strMsg = ""; strReply = ReadLine(); iReplyCode = Int32.Parse(strReply.Substring(0, 3)); } /// /// 建立进行数据连接的socket /// /// 数据连接socket private Socket CreateDataSocket() { SendCommand("PASV"); if (iReplyCode != 227) { throw new IOException(strReply.Substring(4)); } int index1 = strReply.IndexOf('('); int index2 = strReply.IndexOf(')'); string ipData = strReply.Substring(index1 + 1, index2 - index1 - 1); int[] parts = new int[6]; int len = ipData.Length; int partCount = 0; string buf = ""; for (int i = 0; i < len && partCount <= 6; i++) { char ch = Char.Parse(ipData.Substring(i, 1)); if (Char.IsDigit(ch)) buf += ch; else if (ch != ',') { throw new IOException("Malformed PASV strReply: " + strReply); } if (ch == ',' || i + 1 == len) { try { parts[partCount++] = Int32.Parse(buf); buf = ""; } catch (Exception) { throw new IOException("Malformed PASV strReply: " + strReply); } } } string ipAddress = parts[0] + "." + parts[1] + "." + parts[2] + "." + parts[3]; int port = (parts[4] << 8) + parts[5]; Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ipAddress), port); try { s.Connect(ep); } catch (Exception) { throw new IOException("无法连接服务器"); } return s; } /// /// 关闭socket连接(用于登录以前) /// private void CloseSocketConnect() { if (socketControl != null) { socketControl.Close(); socketControl = null; } bConnected = false; } /// /// 读取Socket返回的所有字符串 /// /// 包含应答码的字符串行 private string ReadLine() { while (true) { int iBytes = socketControl.Receive(buffer, buffer.Length, 0); strMsg += GB2312.GetString(buffer, 0, iBytes); if (iBytes < buffer.Length) { break; } } char[] seperator = { '
' }; string[] mess = strMsg.Split(seperator); if (strMsg.Length > 2) { strMsg = mess[mess.Length - 2]; //seperator[0]是10,换行符是由13和0组成的,分隔后10后面虽没有字符串, //但也会分配为空字符串给后面(也是最后一个)字符串数组, //所以最后一个mess是没用的空字符串 //但为什么不直接取mess[0],因为只有最后一行字符串应答码与信息之间有空格 } else { strMsg = mess[0]; } if (!strMsg.Substring(3, 1).Equals(" "))//返回字符串正确的是以应答码(如220开头,后面接一空格,再接问候字符串) { return ReadLine(); } return strMsg; } /// /// 发送命令并获取应答码和最后一行应答字符串 /// /// 命令 private void SendCommand(String strCommand) { Byte[] cmdBytes = GB2312.GetBytes((strCommand + "\r
").ToCharArray()); socketControl.Send(cmdBytes, cmdBytes.Length, 0); ReadReply(); } #endregion } }
‘陆’ ts格式视频在html页面上播放不能快进问题
可能是你的KMPLAYER里的解码器老了,不能识别
‘柒’ 求电影80后DVD版的下载地址
目前网上只有TS版,你要DVD的话恐怕还要等半个月左右。
TS的下载地址:
ftp://172.16.172.11/
电影2/80后TS/01.rmvb
ftp://172.16.172.11/
电影2/80后TS/02.rmvb
不过如果你对这电影很期待的话,建议还是耐心等DVD吧。TS是要看坏眼睛哒~~呵呵