hw5.pdf

‫ﺑﻪ ﻧﺎم دوﺳﺖ‬
‫ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴﯽ ﭘﻴﺸﺮﻓﺘﻪ‬
‫ﻧﻴﻢ ﺳﺎل دوم ‪٨۴-٨٣‬‬
‫ﺕﻤﺮﻳﻦ ﭘﻨﺠﻢ‬
‫اﺵﮑﺎﻻت و ﺳﻮاﻻت ﺧﻮد را ﺑﻪ ‪ Mailing list‬درس ﺑﻔﺮﺳﺘﻴﺪ‪.‬‬
‫‪[email protected]‬‬
‫ﺑﺮای هﺮ ﻳﮏ از ﻣﺴﺎﺋﻞ زﻳﺮ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﺟﺎوا ﺑﻨﻮﻳﺴﻴﺪ‪ ،‬ﮐﻪ اﺱﻢ ﮐﻼس اﺻﻠﯽ ﮐﻪ ﺣﺎوی ﻣﺘﺪ )‪main(String [] args‬‬
‫ﻣﯽ ﺑﺎﺷﺪ ﺑﺎﻳﺪ ﺑﺎ اﺱﻢ ﮐﻼس اﺻﻠﯽ ﮐﻪ در ﺻﻮرت ﻣﺴﺌﻠﻪ دادﻩ ﺷﺪﻩ اﺱﺖ‪ .‬در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﻣﻤﮑﻦ اﺱﺖ ﺕﺼﺤﻴﺢ‬
‫ﺕﻤﺮﻳﻦ ﺷﻤﺎ دﭼﺎر ﻣﺸﮑﻞ ﺷﻮد‪) .‬ﺑﻪ ﺑﺰرﮔﯽ و ﮐﻮﭼﮑﯽ ﺣﺮوف ﺕﻮﺟﻪ ﮐﻨﻴﺪ(‪.‬‬
‫ﺑﺮای ﺕﺤﻮﻳﻞ ﺕﻤﺮﻳﻦ ﺧﻮد ﻓﻘﻂ ﻓﺎﻳﻞ هﺎی ‪ *.java‬ﺕﻤﺮﻳﻦ ﺧﻮد را )ﺑﺪون ﻓﺎﻳﻠﻬﺎی ‪ *.class‬و ‪ file‬ﻳﺎ داﻳﺮﮐﺘﻮری‬
‫اﺿﺎﻓﯽ( ‪ zip‬ﮐﺮدﻩ ]از ﻓﺮﻣﺖ ‪ rar‬اﺳﺘﻔﺎدﻩ ﻧﮑﻨﻴﺪ[‪ ،‬ﮐﻪ ﻧﺎم ﺁن ﺑﻪ ﺻﻮرت زﻳﺮ ﻣﻴﺒﺎﺵﺪ‪:‬‬
‫ﺑﻌﺪ از ”‪ “HW-5‬ﺵﻤﺎرﻩ داﻧﺸﺠﻮﻳﯽ ﺧﻮد را وارد ﮐﺮدﻩ )ﺑﺪون اﻳﻨﮑﻪ از ﮐﺎراﮐﺘﺮ ﻓﺎﺻﻠﻪ ﺧﺎﻝﯽ اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ(‪ .‬ﺑﻪ‬
‫ﻋﻨﻮان ﻣﺜﺎل ‪ ] HW5-83182239.zip :‬از ﻓﺮﻣﺖ ‪ *.rar‬ﻣﺎﻧﻨﺪ ‪ HW5-83182239.rar‬اﺱﺘﻔﺎدﻩ ﻧﮑﻨﻴﺪ[ و ﺱﭙﺲ‬
‫ﺁن را ﺕﻮﺱﻂ ﻳﮏ ‪ email‬ﺑﺎ ﻣﺸﺨﺼﺎت زﻳﺮ ﺑﻪ ﺁدرس ﻣﺬﮐﻮر ارﺱﺎل ﮐﻨﻴﺪ‪.‬‬
‫‪[email protected]‬‬
‫‪HW5-83182239‬‬
‫‪HW5-83182239.zip‬‬
‫‪Recipient:‬‬
‫‪Subject:‬‬
‫‪Body:‬‬
‫‪Attachments:‬‬
‫ﻓﻴﻠﺪ ‪ Subject‬ﻧﺎﻣﻪ‪ ،‬درﺱﺖ ﻣﺎﻧﻨﺪ اﺱﻢ ‪ zip‬ﻓﺎﻳﻞ ‪ attach‬ﺷﺪﻩ ﻣﻴﺒﺎﺷﺪ‪ .‬ﺑﺪﻳﻦ ﺻﻮرت ﮐﻪ ﺑﻌﺪ از ”‪ “HW5-‬ﺷﻤﺎرﻩ‬
‫داﻧﺸﭽﻮﻳﯽ ﺧﻮد را وارد ﮐﺮدﻩ )ﺑﺪون اﻳﻨﮑﻪ از ﮐﺎراﮐﺘﺮ ﻓﺎﺻﻠﻪ ﺧﺎﻝﯽ اﺱﺘﻔﺎدﻩ ﮐﻨﻴﺪ(‪.‬‬
‫ﻧﮑﺎﺕﯽ ﮐﻪ در ارﺳﺎل ﺕﻤﺮﻳﻦ ﺑﺎﻳﺪ ﺣﺘﻤﺎ رﻋﺎﻳﺖ ﺵﻮﻧﺪ‪:‬‬
‫‪ .١‬ﺕﻤﺮﻳﻦ هﺎ ﺣﺘﻤﺎ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت ﮔﻔﺘﻪ ﺷﺪﻩ ارﺱﺎل ﮔﺮدﻧﺪ‪ .‬در ﻏﻴﺮ اﻳﻦ ﺻﻮرت ﺕﺼﺤﻴﺢ ﻧﺨﻮاهﻨﺪ ﮔﺸﺖ‪ ،‬و‬
‫ﻧﻤﺮﻩ ﺁن را از دﺱﺖ ﻣﻴﺪهﻨﺪ‪.‬‬
‫‪ .٢‬ﺕﻮﺟﻪ ﮐﻨﻴﺪ ﮐﻪ ﺑﺪﻧﻪ ‪ mail‬ﺷﻤﺎ ﺧﻮاﻧﺪﻩ ﻧﻤﻴﺸﻮد‪ ،‬ﻝﺬا اﮔﺮ ﻗﺼﺪ ﺑﻴﺎن ﻣﻄﻠﺒﯽ را دارﻳﺪ‪ ،‬ﻧﺎﻣﻪ ای ﺟﺪاﮔﺎﻧﻪ ای‬
‫ارﺱﺎل ﮐﻨﻴﺪ ﮐﻪ ‪ subject‬ﺁن ﻣﺘﻔﺎوت ﺑﺎﺷﺪ‪.‬‬
‫‪ .٣‬ﺕﻮﺝﻪ ﻣﻬﻢ‪ :‬در ﺻﻮرﺕﯽ ﮐﻪ ﮐﺴﯽ ﺕﻤﺮﻳﻦ ﺧﻮد را ﺑﻪ ﺝﺎی ﺁدرس ‪ mail‬درس ﺑﻪ ﺁدرس ‪mailing list‬‬
‫درس ارﺳﺎل ﮐﻨﺪ‪ .‬ﻧﻤﺮﻩ ﺁن ﺕﻤﺮﻳﻦ را از دﺳﺖ ﻣﯽ دهﺪ‪ .‬و در ﺻﻮرت ﺕﮑﺮار ﻧﻤﺮﻩ ﻣﻨﻔﯽ ﺧﻮاهﺪ ﮔﺮﻓﺖ‪.‬‬
‫ﻣﻬﻠﺖ ارﺳﺎل ﺕﻤﺮﻳﻦ ﺳﺮی ﭘﻨﺠﻢ‪ ،‬ﺕﺎ ﺳﺎﻋﺖ ‪ ١٣:٣٠‬ﻇﻬﺮ روز ﭼﻬﺎرﺵﻨﺒﻪ ‪ ٨۴/٢/٢٨‬ﻣﯽ ﺑﺎﺵﺪ‪.‬‬
‫از ﺕﻤﺮﻳﻦ هﺎﻳﯽ ﮐﻪ ﺑﻌﺪ از اﻳﻦ ﺕﺎرﻳﺦ و ﺱﺎﻋﺖ ﻓﺮﺱﺘﺎدﻩ ﺷﻮﻧﺪ‪ ،‬ﺕﺼﺤﻴﺢ ﻧﺨﻮاهﻨﺪ ﺷﺪ‪.‬‬
‫ﻣﺴﺌﻠﻪ ﻳﮏ ‪WebServer.java :‬‬
‫در اﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﮏ ‪ webserver‬ﺑﻨﻮﻳﺴﻴﺪ ﮐﻪ ﺑﻪ ‪ ١٢٣۴۵ port‬ﮔﻮش ﺑﺪهﺪ و ﺑﻪ ‪ request‬هﺎی ‪ http‬ﺟﻮاب‬
‫ﺑﺪهﺪ‪ ،‬و ﻓﺎﻳﻞ هﺎی د رﺧﻮاﺱﺘﯽ ﮐﺎرﺑﺮ را در ﺻﻮرت وﺟﻮد ﺑﺮای او ارﺱﺎل ﮐﻨﺪ و درﺻﻮرت ﻋﺪم وﺟﻮد پﻴﻐﺎم ﺧﻄﺎی‬
‫ﻣﻨﺎﺱﺒﯽ ﻃﺒﻖ پﺮوﺕﮑﻞ ‪ http‬را ﺑﻪ ‪ explorer‬ﺱﻤﺖ ﮐﺎرﺑﺮ ارﺱﺎل ﻓﺮﻣﺎﻳﺪ‪.‬‬
‫ﺑﺮای ﻣﺜﺎل ﮐﺎرﺑﺮ ﻳﮏ ﺻﻔﺤﻪ ‪ explorer‬ﺑﺎز ﻣﯽ ﮐﻨﺪ وﺁدرﺱﻬﺎی زﻳﺮ را وارد ﻣﯽ ﮐﻨﺪ‪:‬‬
‫‪http://localhost:12345/test.html‬‬
‫‪http://localhost:12345/flower.gif‬‬
‫ﺱﺮور ﺷﻤﺎ ﺑﺎﻳﺪ اﻳﻦ ‪ request‬هﺎ را ﺑﮕﻴﺮد‪ .‬و ﻓﺎﻳﻞ درﺧﻮاﺱﺘﯽ ﺁﻧﻬﺎ را در ﺻﻮرت وﺟﻮد ﺑﻪ ﮐﺎرﺑﺮ ارﺱﺎل ﮐﻨﺪ‪) .‬‬
‫ﺱﺮور ﺷﻤﺎ ﺑﺎﻳﺪ ﻳﮏ داﻳﺮﮐﺘﻮری ﻓﺮﺿﯽ دﻝﺨﻮاﻩ )‪ (c:\web‬ﺑﻪ ﻋﻨﻮان داﻳﺮﮐﺘﻮری ‪ default‬ﺧﻮد ﺑﺮای ﺟﺴﺘﺠﻮ ﺑﺮای‬
‫ﻓﺎﻳﻞ هﺎی درﺧﻮاﺱﺘﯽ در ﻧﻈﺮ ﺑﮕﻴﺮد(‬
‫ﺑﺎﻳﺪ ﻳﺎدﺁوری ﮐﻨﻢ ﮐﻪ در پﺮوﺕﮑﻞ ‪ request ،http‬هﺎ و ‪ response‬هﺎ هﻤﻪ ‪ text‬ﺱﺎدﻩ هﺴﺘﻨﺪ‪ .‬ﮐﻪ ﺑﻪ راﺣﺘﯽ ﻣﯽ ﺕﻮان‬
‫ﺧﻂ ﺑﻪ ﺧﻂ ﺁﻧﻬﺎ را ﺧﻮاﻧﺪ‪ .‬ﺑﺮای اﻳﻨﮑﻪ ﺑﺘﻮاﻧﻴﺪ ﺑﻪ ‪ request‬هﺎی ‪ http‬ﺟﻮاب ﺑﺪهﻴﺪ‪ .‬ﮐﺎﻓﻴﺴﺖ ﮐﻪ از ‪ request‬هﺎی‬
‫‪ http‬ﺕﻨﻬﺎ ﺧﻂ اول و در ﺻﻮرت ﻧﻴﺎز ﺑﻌﻀﯽ از ‪ header‬هﺎی ﺁن را ﮐﻪ در ﺧﻄﻮط ﺑﻌﺪی هﺴﺘﻨﺪ را ﺑﺨﻮاﻧﻴﺪ‪ .‬و ﺑﺮای‬
‫‪ response‬هﺎ ﮐﺎﻓﻴﺴﺖ ﮐﻪ ﺧﻂ اول ﺁن ﮐﺪ ﺻﺤﻴﺢ را ﮔﺬاﺷﺘﻪ و در ﺧﻄﻮط ﺑﻌﺪی ﮐﻪ ‪ header‬هﺎ هﺴﺘﻨﺪ ﺕﻨﻬﺎ ﺑﺮﺧﯽ از‬
‫ﺁﻧﻬﺎ ﮐﻪ ﺿﺮوری هﺴﺘﻨﺪ ﻣﺎﻧﻨﺪ “ ‪ “Content-type:‬و ”‪ “Content-length‬را ‪ set‬ﮐﺮدﻩ و در ‪ response‬ﻗﺮار‬
‫دهﻴﺪ‪.‬ﻣﺎﺑﻘﯽ ﮐﺎر را ﺧﻮد ‪ browser‬اﻧﺠﺎم ﻣﻴﺪهﺪ و اﮔﺮ ‪ format‬ﺁن ﺻﺤﻴﺢ ﺑﻮد‪ ،‬ﻣﺤﺘﻮای ‪ response‬ﺷﻤﺎ را ﺧﻮاﻧﺪﻩ‬
‫و ﺁن را ﻧﻤﺎﻳﺶ ﻣﯽ دهﺪ‪.‬‬
‫ﺁدرس ‪ server‬ﺷﻤﺎ هﻤﺎن ﺁدرس ‪ local‬ﮐﺎﻣﭙﻴﻮﺕﺮ ﺷﻤﺎ اﺱﺖ‪ .‬ﮐﻪ ﻋﺒﺎرت اﺱﺖ از ‪ . http://localhost/‬اﻣﺎ ﭼﻮن‬
‫‪ explorer‬هﻤﻮارﻩ ‪ request‬هﺎی ﺧﻮد را ﺑﻪ ‪ port 80‬ﮐﺎﻣﭙﻴﻮﺕﺮ ﻣﯽ ﻓﺮﺱﺘﺪ و ﺑﻪ ﺁن ﮔﻮش ﻣﯽ دهﺪ‪ ،‬ﺑﺮای اﻳﻨﮑﻪ‬
‫‪ ،explorer‬پﻴﻐﺎم هﺎی ‪ (http requests) http‬ﺧﻮد را ﺑﻪ ‪) port 12345‬هﻤﺎن ‪ port‬ﻳﯽ ﮐﻪ ﺱﺮور ﺷﻤﺎ ﺑﻪ ﺁن‬
‫ﮔﻮش ﻣﻴﺪهﺪ( ارﺱﺎل ﮐﻨﺪ‪ ،‬ﺑﺎﻳﺪ ﺑﻨﻮﻳﺴﻴﺪ ‪) http://localhost:12345/ :‬ﺑﻌﺪ از ﺁدرس ﺱﺮور‪ ،‬ﺑﻌﺪ از ‪ :‬ﺑﺎﻳﺪ ‪port‬‬
‫‪ number‬را وارد ﮐﻨﻴﺪ‪ ،‬ﺕﺎ ‪ request‬ﺷﻤﺎ ﺑﻪ ‪ port‬ﺧﺎﺻﯽ از‪ server‬ﻣﺮﺑﻮﻃﻪ ﻓﺮﺱﺘﺎدﻩ ﺷﻮد(‬
‫ﻝﻴﺴﺖ ﺧﻄﺎهﺎﻳﯽ ﮐﻪ در ‪ http‬وﺟﻮد دارد ﺑﻪ هﻤﺮاﻩ ﻳﮏ ﺱﺮی ﻣﻄﺎﻝﺐ دﻳﮕﺮ در ‪ power point‬ﻳﯽ در ﺱﺎﻳﺖ درس‬
‫‪ upload‬ﺷﺪﻩ اﺱﺖ‪.‬‬
‫از ﺟﻤﻠﻪ ‪ type‬هﺎﻳﯽ ﮐﻪ ‪ server‬ﺷﻤﺎ ﺑﺎﻳﺪ ﺁن هﺎ را ﺑﭙﺬﻳﺮد‪ ) :‬ﺷﻤﺎ ﺑﺎﻳﺪ ‪ type‬هﺎی ﺑﻴﺸﺘﺮی را پﻴﺪا ﮐﻨﻴﺪ‪ ،‬ﺣﺪاﻗﻞ ‪ ۴‬ﻧﻮع‬
‫دﻳﮕﺮ پﻴﺪا ﮐﻨﻴﺪ(‬
‫ﻓﺎﻳﻞ ﻣﺘﻨﯽ ‪html‬‬
‫ﻓﺎﻳﻞ ﺕﺼﻮﻳﺮی ‪gif‬‬
‫ﻓﺎﻳﻞ ﺕﺼﻮﻳﺮی ‪jpeg‬‬
‫‪Content-type : text/html‬‬
‫‪Content-type : image/gif‬‬
‫‪Content-type : image/jpeg‬‬
‫ﺕﻮﺟﻪ داﺷﺘﻪ ﺑﺎﺷﻴﺪ ﮐﻪ اﮔﺮ ﻓﺎﻳﻞ درﺧﻮاﺱﺘﯽ ﮐﺎرﺑﺮ وﺟﻮد داﺷﺖ ﺑﺎﻳﺪ ﺁن را در اﻧﺘﻬﺎی ‪ response‬ﺑﻌﺪ از ﻗﺴﻤﺖ‬
‫‪ header‬ﻗﺮار دهﻴﺪ‪ .‬ﺑﻴﻦ ﻗﺴﻤﺖ ‪ header‬و ‪ data‬ﺑﺎﻳﺪ ﺣﺘﻤﺎ ﻣﺘﻦ "‪ "\r\n‬را در ﻣﺘﻦ ‪ response‬وارد ﮐﻨﻴﺪ ﺕﺎ‬
‫‪ explorer‬ﻣﺮز ﺑﻴﻦ ‪ header‬و ‪ data‬را ﺕﺸﻴﺨﺺ دهﺪ‪.‬‬
‫ﻧﻤﺮﻩ اﺿﺎﻓﯽ ‪:‬‬
‫پﺲ از ﻧﻮﺷﺘﻦ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﺧﻮاهﻴﺪ دﻳﺪ ﮐﻪ ﺱﺮور ﺷﻤﺎ ﺕﻨﻬﺎ ﺑﻪ ﻳﮏ ‪ request‬ﺟﻮاب ﻣﯽ دهﺪ‪ ،‬در ﺣﺎﻝﻴﮑﻪ ﺱﺮور ﺷﻤﺎ ﻣﻤﮑﻦ‬
‫اﺱﺖ در ﻳﮏ ‪ while‬هﻤﻴﺸﻪ ‪ true‬ﻗﺮار داﺷﺘﻪ ﺑﺎﺷﺪ!!!! ﭼﺮا ؟‬
‫ﺁﻳﺎ راﻩ ﺣﻠﯽ ﺑﻪ ﻧﻈﺮ ﺷﻤﺎ ﻣﯽ رﺱﺪ ؟‬
‫درﺱﺘﻪ اﺱﺘﻔﺎدﻩ از ‪ ،thread‬پﺲ اﻣﺘﺤﺎن ﮐﻨﻴﺪ‪.‬‬
‫اﻣﺎ ﺑﺎز هﻢ اﮔﺮ ﺑﻪ درﺱﺘﯽ از ‪ thread‬اﺱﺘﻔﺎدﻩ ﻧﮑﻨﻴﺪ‪ ،‬ﺱﺮور ﺷﻤﺎ ﺕﻨﻬﺎ ﺑﻪ ﻳﮏ ‪ request‬پﺎﺱﺦ ﺧﻮاهﺪ داد‪.‬‬
‫ﭼﺮا؟؟‬
‫ﺑﺮای اﻳﻦ ﻣﻮﺿﻮع راﻩ ﺣﻠﯽ پﻴﺪا ﮐﻨﻴﺪ و ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﻣﺒﺘﻨﯽ ﺑﺮ ﺁن ﺑﻨﻮﻳﺴﻴﺪ‪.‬‬
‫ﻣﻮﻓﻖ و ﻣﻮﻳﺪ ﺑﺎﺷﻴﺪ‪.‬‬
‫ﺧﺪاﻳﺎ! ﺁﺱﺎن ﺑﻮدن دﺷﻮار اﺱﺖ‬
‫ﺁﺱﺎﻧﻢ ﮐﻦ‪.‬‬
‫ﺁﻧﯽ ﻧﻴﺴﺘﻢ ﮐﻪ ﺑﺎﻳﺪ‬
‫ﺁﻧﻢ ﮐﻦ‪.‬‬