<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>%%CATEGORY%%:rss</title>
		<link>http://ccckmit.wikidot.com</link>
		<description>陳鍾誠的首頁 -- 金門大學 資訊工程系</description>
				<copyright></copyright>
		<lastBuildDate>Sun, 17 May 2026 03:19:17 +0000</lastBuildDate>
		
					<item>
				<guid>http://ccckmit.wikidot.com/jn:ref</guid>
				<title>Java 網路程式設計 -- 參考文獻</title>
				<link>http://ccckmit.wikidot.com/jn:ref</link>
				<description>

&lt;ol&gt;
&lt;li&gt;Java 2－JDK 5.0教學手冊(第三版)(附CD) &amp;#8212; &lt;a href=&quot;http://www.books.com.tw/exep/prod/booksfile.php?item=0010294947&quot;&gt;http://www.books.com.tw/exep/prod/booksfile.php?item=0010294947&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java 網路程式設計 - 顏春煌 著 , 旗標出版社, 2004年六月初版&lt;/li&gt;
&lt;li&gt;Java 程式設計範例教本 - 陳惠安 著, 學貫出版社, 年 月第二版&lt;/li&gt;
&lt;li&gt;Java 的官方網站 &amp;#8212; &lt;a href=&quot;http://java.sun.com/&quot;&gt;http://java.sun.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;良葛格的學習筆記 &amp;#8212; &lt;a href=&quot;http://caterpillar.onlyfun.net/Gossip/&quot;&gt;http://caterpillar.onlyfun.net/Gossip/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sofia Open Content Initiative - Java &amp;#8212; &lt;a href=&quot;http://sofia.fhda.edu/gallery/java/&quot;&gt;http://sofia.fhda.edu/gallery/java/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java 技術論壇 &amp;#8212; &lt;a href=&quot;http://www.javaworld.com.tw/&quot;&gt;http://www.javaworld.com.tw/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java 百科 &amp;#8212; &lt;a href=&quot;http://wiki.java.net/bin/view/Javapedia&quot;&gt;http://wiki.java.net/bin/view/Javapedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translating Java to C &amp;#8212; &lt;a href=&quot;http://www.dinkumware.com/jproject.html&quot;&gt;http://www.dinkumware.com/jproject.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Java Web Pages about compiler &amp;#8212; &lt;a href=&quot;http://www.bearcave.com/software/java&quot;&gt;http://www.bearcave.com/software/java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bearcave.com/software/java/&quot;&gt;http://www.bearcave.com/software/java/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Thinking in Java (線上課本) &amp;#8212; &lt;a href=&quot;http://www.mindview.net/Books/TIJ/&quot;&gt;http://www.mindview.net/Books/TIJ/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dr. Philip Hanna 的 Java 教學網站 &amp;#8212; &lt;a href=&quot;http://www.cs.qub.ac.uk/~P.Hanna/JavaProgramming/&quot;&gt;http://www.cs.qub.ac.uk/~P.Hanna/JavaProgramming/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;JGuru 的教學網站 &amp;#8212; &lt;a href=&quot;http://www.jguru.com/learn/&quot;&gt;http://www.jguru.com/learn/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IBM 的 Java 新手介紹 &amp;#8212; &lt;a href=&quot;http://www-106.ibm.com/developerworks/java/newto/&quot;&gt;http://www-106.ibm.com/developerworks/java/newto/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;java.net &amp;#8212; &lt;a href=&quot;http://wiki.java.net/&quot;&gt;http://wiki.java.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;JavaIdioms &amp;#8212; &lt;a href=&quot;http://c2.com/cgi/wiki?JavaIdioms&quot;&gt;http://c2.com/cgi/wiki?JavaIdioms&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 02:45:13 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <ol> <li>Java 2－JDK 5.0教學手冊(第三版)(附CD) &#8212; <a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010294947">http://www.books.com.tw/exep/prod/booksfile.php?item=0010294947</a></li> <li>Java 網路程式設計 - 顏春煌 著 , 旗標出版社, 2004年六月初版</li> <li>Java 程式設計範例教本 - 陳惠安 著, 學貫出版社, 年 月第二版</li> <li>Java 的官方網站 &#8212; <a href="http://java.sun.com/">http://java.sun.com/</a></li> <li>良葛格的學習筆記 &#8212; <a href="http://caterpillar.onlyfun.net/Gossip/">http://caterpillar.onlyfun.net/Gossip/</a></li> <li>Sofia Open Content Initiative - Java &#8212; <a href="http://sofia.fhda.edu/gallery/java/">http://sofia.fhda.edu/gallery/java/</a></li> <li>Java 技術論壇 &#8212; <a href="http://www.javaworld.com.tw/">http://www.javaworld.com.tw/</a></li> <li>Java 百科 &#8212; <a href="http://wiki.java.net/bin/view/Javapedia">http://wiki.java.net/bin/view/Javapedia</a></li> <li>Translating Java to C &#8212; <a href="http://www.dinkumware.com/jproject.html">http://www.dinkumware.com/jproject.html</a></li> <li>The Java Web Pages about compiler &#8212; <a href="http://www.bearcave.com/software/java">http://www.bearcave.com/software/java</a></li> <li><a href="http://www.bearcave.com/software/java/">http://www.bearcave.com/software/java/</a></li> <li>Thinking in Java (線上課本) &#8212; <a href="http://www.mindview.net/Books/TIJ/">http://www.mindview.net/Books/TIJ/</a></li> <li>Dr. Philip Hanna 的 Java 教學網站 &#8212; <a href="http://www.cs.qub.ac.uk/~P.Hanna/JavaProgramming/">http://www.cs.qub.ac.uk/~P.Hanna/JavaProgramming/</a></li> <li>JGuru 的教學網站 &#8212; <a href="http://www.jguru.com/learn/">http://www.jguru.com/learn/</a></li> <li>IBM 的 Java 新手介紹 &#8212; <a href="http://www-106.ibm.com/developerworks/java/newto/">http://www-106.ibm.com/developerworks/java/newto/</a></li> <li>java.net &#8212; <a href="http://wiki.java.net/">http://wiki.java.net/</a></li> <li>JavaIdioms &#8212; <a href="http://c2.com/cgi/wiki?JavaIdioms">http://c2.com/cgi/wiki?JavaIdioms</a></li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:site</guid>
				<title>Java 網路程式設計 -- 相關網站</title>
				<link>http://ccckmit.wikidot.com/jn:site</link>
				<description>

&lt;ol&gt;
&lt;li&gt;JR&#039;s Education Pages &amp;#8212; &lt;a href=&quot;http://home.cogeco.ca/~ve3ll/&quot;&gt;http://home.cogeco.ca/~ve3ll/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.java.com/zh_TW/&quot;&gt;http://www.java.com/zh_TW/&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.java.com/zh_TW/download/index.jsp&quot;&gt;http://www.java.com/zh_TW/download/index.jsp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;暨南大學 (Java) &amp;#8212; &lt;a href=&quot;http://programming.im.ncnu.edu.tw/J_index.html&quot;&gt;http://programming.im.ncnu.edu.tw/J_index.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Java Gossip &amp;#8212; &lt;a href=&quot;http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm&quot;&gt;http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 02:44:15 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <ol> <li>JR's Education Pages &#8212; <a href="http://home.cogeco.ca/~ve3ll/">http://home.cogeco.ca/~ve3ll/</a></li> <li><a href="http://www.java.com/zh_TW/">http://www.java.com/zh_TW/</a> <ul> <li><a href="http://www.java.com/zh_TW/download/index.jsp">http://www.java.com/zh_TW/download/index.jsp</a></li> </ul> </li> <li>暨南大學 (Java) &#8212; <a href="http://programming.im.ncnu.edu.tw/J_index.html">http://programming.im.ncnu.edu.tw/J_index.html</a></li> <li>Java Gossip &#8212; <a href="http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm">http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm</a></li> </ol> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:browser</guid>
				<title>Java 網路程式設計 -- 瀏覽器 (Browser)</title>
				<link>http://ccckmit.wikidot.com/jn:browser</link>
				<description>

&lt;div class=&quot;code&quot;&gt;
&lt;div class=&quot;hl-main&quot;&gt;
&lt;pre&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;net&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;io&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;awt&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;awt&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;javax&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;swing&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;util&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Properties&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;SimpleBrowser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JFrame&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;implements&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ActionListener&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JTextArea&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;private&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JTextField&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 建構子&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;SimpleBrowser&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;super&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;原始程式碼瀏覽程式&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setProxy&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxy.internal&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;3128&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getContentPane&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setLayout&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;FlowLayout&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;FlowLayout&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;CENTER&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 建立Swing元件的使用介面&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JLabel&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JLabel&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;URL: &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JTextField&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;40&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;requestFocus&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JButton&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JButton&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;瀏覽&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;addActionListener&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JTextArea&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;18&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setEditable&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;  &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 不可編輯&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JScrollPane&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;area&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;JScrollPane&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;area&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 事件處理方法&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;actionPerformed&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ActionEvent&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;evt&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;   &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 建立URL物件&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;URL&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getText&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 建立Socket物件, 埠號為80&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getHost&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;80&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;InputStreamReader&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;isr&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;InputStreamReader&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getInputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;BufferedReader&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;BufferedReader&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;isr&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;OutputStreamWriter&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;osw&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;OutputStreamWriter&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getOutputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;PrintWriter&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;PrintWriter&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;osw&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 送出GET指令&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;GET &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; + &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getFile&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readLine&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;  &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 讀取指令的回應&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readLine&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readLine&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 讀取檔案&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readLine&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; != &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; 
               &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; + &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;   &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 關閉Socket物件&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; 
       &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;browser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;檔案瀏覽錯誤!&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 主程式&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[])&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;SimpleBrowser&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;SimpleBrowser&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;addWindowListener&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;WindowAdapter&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
             &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;windowClosing&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;WindowEvent&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
             &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
                &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
             &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
           &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
       &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setSize&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;700&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
       &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setVisible&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setProxy&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pProxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Properties&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getProperties&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxySet&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxyHost&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pProxy&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxyPort&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setProperties&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 02:35:33 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">awt</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">awt</span><span class="hl-code">.</span><span class="hl-identifier">event</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">javax</span><span class="hl-code">.</span><span class="hl-identifier">swing</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">util</span><span class="hl-code">.</span><span class="hl-identifier">Properties</span><span class="hl-code">; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">SimpleBrowser</span><span class="hl-code"> </span><span class="hl-reserved">extends</span><span class="hl-code"> </span><span class="hl-identifier">JFrame</span><span class="hl-code"> </span><span class="hl-reserved">implements</span><span class="hl-code"> </span><span class="hl-identifier">ActionListener</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">private</span><span class="hl-code"> </span><span class="hl-identifier">JTextArea</span><span class="hl-code"> </span><span class="hl-identifier">browser</span><span class="hl-code">; </span><span class="hl-reserved">private</span><span class="hl-code"> </span><span class="hl-identifier">JTextField</span><span class="hl-code"> </span><span class="hl-identifier">address</span><span class="hl-code">; </span><span class="hl-comment">// 建構子</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">SimpleBrowser</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">super</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">原始程式碼瀏覽程式</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">setProxy</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxy.internal</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">3128</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">Container</span><span class="hl-code"> </span><span class="hl-identifier">c</span><span class="hl-code"> = </span><span class="hl-identifier">getContentPane</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">c</span><span class="hl-code">.</span><span class="hl-identifier">setLayout</span><span class="hl-brackets">(</span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">FlowLayout</span><span class="hl-brackets">(</span><span class="hl-identifier">FlowLayout</span><span class="hl-code">.</span><span class="hl-identifier">CENTER</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-comment">// 建立Swing元件的使用介面</span><span class="hl-code"> </span><span class="hl-identifier">JLabel</span><span class="hl-code"> </span><span class="hl-identifier">label</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">JLabel</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">URL: </span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">address</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">JTextField</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;&quot;</span><span class="hl-code">, </span><span class="hl-number">40</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">address</span><span class="hl-code">.</span><span class="hl-identifier">requestFocus</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">JButton</span><span class="hl-code"> </span><span class="hl-identifier">button</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">JButton</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">瀏覽</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">button</span><span class="hl-code">.</span><span class="hl-identifier">addActionListener</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">browser</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">JTextArea</span><span class="hl-brackets">(</span><span class="hl-number">18</span><span class="hl-code">, </span><span class="hl-number">60</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">browser</span><span class="hl-code">.</span><span class="hl-identifier">setEditable</span><span class="hl-brackets">(</span><span class="hl-reserved">false</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 不可編輯</span><span class="hl-code"> </span><span class="hl-identifier">JScrollPane</span><span class="hl-code"> </span><span class="hl-identifier">area</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">JScrollPane</span><span class="hl-brackets">(</span><span class="hl-identifier">browser</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">c</span><span class="hl-code">.</span><span class="hl-identifier">add</span><span class="hl-brackets">(</span><span class="hl-identifier">area</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">c</span><span class="hl-code">.</span><span class="hl-identifier">add</span><span class="hl-brackets">(</span><span class="hl-identifier">label</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">c</span><span class="hl-code">.</span><span class="hl-identifier">add</span><span class="hl-brackets">(</span><span class="hl-identifier">address</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">c</span><span class="hl-code">.</span><span class="hl-identifier">add</span><span class="hl-brackets">(</span><span class="hl-identifier">button</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-comment">// 事件處理方法</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">actionPerformed</span><span class="hl-brackets">(</span><span class="hl-identifier">ActionEvent</span><span class="hl-code"> </span><span class="hl-identifier">evt</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 建立URL物件</span><span class="hl-code"> </span><span class="hl-identifier">URL</span><span class="hl-code"> </span><span class="hl-identifier">url</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">URL</span><span class="hl-brackets">(</span><span class="hl-identifier">address</span><span class="hl-code">.</span><span class="hl-identifier">getText</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 建立Socket物件, 埠號為80</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-brackets">(</span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getHost</span><span class="hl-brackets">()</span><span class="hl-code">, </span><span class="hl-number">80</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">InputStreamReader</span><span class="hl-code"> </span><span class="hl-identifier">isr</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">InputStreamReader</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">BufferedReader</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">BufferedReader</span><span class="hl-brackets">(</span><span class="hl-identifier">isr</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">OutputStreamWriter</span><span class="hl-code"> </span><span class="hl-identifier">osw</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">OutputStreamWriter</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getOutputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">PrintWriter</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">PrintWriter</span><span class="hl-brackets">(</span><span class="hl-identifier">osw</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 送出GET指令</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">GET </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getFile</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 讀取指令的回應</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">line</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-code">; </span><span class="hl-comment">// 讀取檔案</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-brackets">((</span><span class="hl-identifier">line</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">())</span><span class="hl-code"> != </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">browser</span><span class="hl-code">.</span><span class="hl-identifier">append</span><span class="hl-brackets">(</span><span class="hl-identifier">line</span><span class="hl-code"> + </span><span class="hl-quotes">&quot;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉Socket物件</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">browser</span><span class="hl-code">.</span><span class="hl-identifier">append</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">檔案瀏覽錯誤!</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-comment">// 主程式</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">SimpleBrowser</span><span class="hl-code"> </span><span class="hl-identifier">app</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">SimpleBrowser</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">app</span><span class="hl-code">.</span><span class="hl-identifier">addWindowListener</span><span class="hl-brackets">(</span><span class="hl-code"> </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">WindowAdapter</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">windowClosing</span><span class="hl-brackets">(</span><span class="hl-identifier">WindowEvent</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">exit</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">app</span><span class="hl-code">.</span><span class="hl-identifier">setSize</span><span class="hl-brackets">(</span><span class="hl-number">700</span><span class="hl-code">, </span><span class="hl-number">400</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">app</span><span class="hl-code">.</span><span class="hl-identifier">setVisible</span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">setProxy</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pProxy</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">Properties</span><span class="hl-code"> </span><span class="hl-identifier">systemSettings</span><span class="hl-code"> = </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">getProperties</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxySet</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">true</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyHost</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">pProxy</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyPort</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">setProperties</span><span class="hl-brackets">(</span><span class="hl-identifier">systemSettings</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:proxy</guid>
				<title>Java 網路程式設計 -- Proxy</title>
				<link>http://ccckmit.wikidot.com/jn:proxy</link>
				<description>

&lt;div class=&quot;code&quot;&gt;
&lt;div class=&quot;hl-main&quot;&gt;
&lt;pre&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;net&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;io&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;java&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;util&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.*;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxyServer&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ServerSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxySocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;mpeg=video/mpeg&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;mpg=video/mpeg&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;wav=audio/x-wav&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;jpg=image/jpeg&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, 
                 &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;gif=image/gif&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;zip=application/zip&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;pdf=application/pdf&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;xls=application/vnd.ms-excel&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, 
                 &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;ppt=application/vnd.ms-powerpoint&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;doc=application/msword&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;htm=text/html&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, 
                 &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;html=text/html&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;css=text/plain&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;vbs=text/plain&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;js=text/plain&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;txt=text/plain&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, 
                 &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;java=text/plain&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;FileWriter&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;FileWriter&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;WebServer.log&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverHost&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxy.internal&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;  &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverPort&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;3128&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[])&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setProxy&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxy.internal&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;3128&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxyPort&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;3128&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;rootPath&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;gt;= &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxyPort&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Integer&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;])&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;gt;= &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;rootPath&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxyServer&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxyPort&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;rootPath&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxyServer&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pRoot&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;IOException&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxySocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ServerSocket&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 建立 ServerSocket 物件並佔領 port (預設為 80).&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;rootDir&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pRoot&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;rootDir&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getCanonicalPath&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;port=&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt; root=&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;root&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setProxy&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pProxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Properties&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getProperties&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxySet&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxyHost&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pProxy&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxyPort&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pPort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;setProperties&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;systemSettings&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 接受瀏覽器的連線。注意: accept() 是一個等待型呼叫，會一直等到有連線進來才完成執行。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxySocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;accept&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxySession&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxySession&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;session&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;printStackTrace&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;*/*&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;toLowerCase&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;mime&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;tokens&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;endsWith&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ext&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;mime&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataOutputStream&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;writeBytes&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxySession&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;extends&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Thread&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxyServer&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;BUF_SIZE&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;40960&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataOutputStream&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataInputStream&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientIn&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverIn&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
 
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxySession&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;ProxyServer&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataOutputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getOutputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 取得傳送資料的輸出檔。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientIn&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;  = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataInputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getInputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;   &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 取得接收資料的輸入檔。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverHost&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxy&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverPort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataOutputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getOutputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 取得傳送資料的輸出檔。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverIn&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;  = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataInputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getInputStream&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;   &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 取得接收資料的輸入檔。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;    
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;begin http session&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 讀取瀏覽器傳來的請求訊息。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;           &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 回應訊息給對方的瀏覽器。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; 
          &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;printStackTrace&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
          &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;end http session&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;isClosed&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;isClosed&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverSocket&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;printStackTrace&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;  
 
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// read request form client&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readHead&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientIn&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;=========request:head============&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readContent&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientIn&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// send request to server&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getBytes&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;UTF-8&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; != &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throws&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// read response form server&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readHead&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverIn&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;=========response:head===========&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readContent&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;serverIn&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// send response to client&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;getBytes&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;UTF-8&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; != &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;clientOut&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;write&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxyConnection&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;innerText&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;Proxy-Connection:&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;proxyConnection=&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;proxyConnection&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
&lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;//    if (proxyConnection==null || proxyConnection.toLowerCase().trim().equals(&amp;quot;close&amp;quot;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;throw&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;connection close&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;innerText&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pText&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginMark&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;endMark&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginStart&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pText&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginMark&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginStart&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginEnd&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginStart&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginMark&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;endStart&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pText&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;indexOf&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;endMark&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginEnd&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;endStart&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;pText&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;beginEnd&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;endStart&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readHead&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataInputStream&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 讀取到第一個空白行為止，這是標頭訊息。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readLine&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; == &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; += &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;length&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; == &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;break&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;readContent&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;DataInputStream&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;// 根據 Content-Length: ，讀取到第一個空白行後面的區塊。&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lengthStr&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;innerText&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;toLowerCase&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;content-length:&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;*contentLength:&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lengthStr&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lengthStr&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; != &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
        &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;contentLength&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Integer&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lengthStr&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;trim&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;())&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-types&quot;&gt;byte&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;contentLength&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;read&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
        &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;content&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
      &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;Exception&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;{}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
    &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;;
  &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 02:33:22 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">util</span><span class="hl-code">.*; </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">ProxyServer</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">ServerSocket</span><span class="hl-code"> </span><span class="hl-identifier">proxySocket</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">root</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">map</span><span class="hl-code"> =</span><span class="hl-brackets">{</span><span class="hl-quotes">&quot;</span><span class="hl-string">mpeg=video/mpeg</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">mpg=video/mpeg</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">wav=audio/x-wav</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">jpg=image/jpeg</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">gif=image/gif</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">zip=application/zip</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">pdf=application/pdf</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">xls=application/vnd.ms-excel</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">ppt=application/vnd.ms-powerpoint</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">doc=application/msword</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">htm=text/html</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">html=text/html</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">css=text/plain</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">vbs=text/plain</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">js=text/plain</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">txt=text/plain</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">java=text/plain</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">}</span><span class="hl-code">; </span><span class="hl-identifier">FileWriter</span><span class="hl-code"> </span><span class="hl-identifier">log</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">FileWriter</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">WebServer.log</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">serverHost</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">proxy.internal</span><span class="hl-quotes">&quot;</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">serverPort</span><span class="hl-code">=</span><span class="hl-number">3128</span><span class="hl-code">; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">setProxy</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxy.internal</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">3128</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">proxyPort</span><span class="hl-code"> = </span><span class="hl-number">3128</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">rootPath</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;&quot;</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code"> &gt;= </span><span class="hl-number">2</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">proxyPort</span><span class="hl-code"> = </span><span class="hl-identifier">Integer</span><span class="hl-code">.</span><span class="hl-identifier">parseInt</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code"> &gt;= </span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">rootPath</span><span class="hl-code"> = </span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">ProxyServer</span><span class="hl-brackets">(</span><span class="hl-identifier">proxyPort</span><span class="hl-code">, </span><span class="hl-identifier">rootPath</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">ProxyServer</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">pPort</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pRoot</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">IOException</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">proxySocket</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">ServerSocket</span><span class="hl-brackets">(</span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 建立 ServerSocket 物件並佔領 port (預設為 80).</span><span class="hl-code"> </span><span class="hl-identifier">File</span><span class="hl-code"> </span><span class="hl-identifier">rootDir</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">File</span><span class="hl-brackets">(</span><span class="hl-identifier">pRoot</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">root</span><span class="hl-code"> = </span><span class="hl-identifier">rootDir</span><span class="hl-code">.</span><span class="hl-identifier">getCanonicalPath</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">port=</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">pPort</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-string"> root=</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">root</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">setProxy</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pProxy</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">Properties</span><span class="hl-code"> </span><span class="hl-identifier">systemSettings</span><span class="hl-code"> = </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">getProperties</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxySet</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">true</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyHost</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">pProxy</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyPort</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">setProperties</span><span class="hl-brackets">(</span><span class="hl-identifier">systemSettings</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 接受瀏覽器的連線。注意: accept() 是一個等待型呼叫，會一直等到有連線進來才完成執行。</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">clientSocket</span><span class="hl-code"> = </span><span class="hl-identifier">proxySocket</span><span class="hl-code">.</span><span class="hl-identifier">accept</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">ProxySession</span><span class="hl-code"> </span><span class="hl-identifier">session</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">ProxySession</span><span class="hl-brackets">(</span><span class="hl-reserved">this</span><span class="hl-code">, </span><span class="hl-identifier">clientSocket</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">session</span><span class="hl-code">.</span><span class="hl-identifier">start</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">type</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">path</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">type</span><span class="hl-code">=</span><span class="hl-quotes">&quot;</span><span class="hl-string">*/*</span><span class="hl-quotes">&quot;</span><span class="hl-code">; </span><span class="hl-identifier">path</span><span class="hl-code"> = </span><span class="hl-identifier">path</span><span class="hl-code">.</span><span class="hl-identifier">toLowerCase</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">for</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">i</span><span class="hl-code">=</span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">&lt;</span><span class="hl-identifier">map</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">tokens</span><span class="hl-code"> = </span><span class="hl-identifier">map</span><span class="hl-brackets">[</span><span class="hl-identifier">i</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">split</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">=</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">ext</span><span class="hl-code"> = </span><span class="hl-identifier">tokens</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">mime</span><span class="hl-code"> = </span><span class="hl-identifier">tokens</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">path</span><span class="hl-code">.</span><span class="hl-identifier">endsWith</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">.</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">ext</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-identifier">type</span><span class="hl-code"> = </span><span class="hl-identifier">mime</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">type</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">output</span><span class="hl-brackets">(</span><span class="hl-identifier">DataOutputStream</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">str</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">writeBytes</span><span class="hl-brackets">(</span><span class="hl-identifier">str</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-special">\r\n</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">str</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">ProxySession</span><span class="hl-code"> </span><span class="hl-reserved">extends</span><span class="hl-code"> </span><span class="hl-identifier">Thread</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">ProxyServer</span><span class="hl-code"> </span><span class="hl-identifier">proxy</span><span class="hl-code">; </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">clientSocket</span><span class="hl-code">; </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">serverSocket</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">BUF_SIZE</span><span class="hl-code"> = </span><span class="hl-number">40960</span><span class="hl-code">; </span><span class="hl-identifier">DataOutputStream</span><span class="hl-code"> </span><span class="hl-identifier">clientOut</span><span class="hl-code">, </span><span class="hl-identifier">serverOut</span><span class="hl-code">; </span><span class="hl-identifier">DataInputStream</span><span class="hl-code"> </span><span class="hl-identifier">clientIn</span><span class="hl-code">, </span><span class="hl-identifier">serverIn</span><span class="hl-code">; </span><span class="hl-identifier">ProxySession</span><span class="hl-brackets">(</span><span class="hl-identifier">ProxyServer</span><span class="hl-code"> </span><span class="hl-identifier">proxy</span><span class="hl-code">, </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">clientSocket</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">proxy</span><span class="hl-code"> = </span><span class="hl-identifier">proxy</span><span class="hl-code">; </span><span class="hl-reserved">this</span><span class="hl-code">.</span><span class="hl-identifier">clientSocket</span><span class="hl-code"> = </span><span class="hl-identifier">clientSocket</span><span class="hl-code">; </span><span class="hl-identifier">clientOut</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DataOutputStream</span><span class="hl-brackets">(</span><span class="hl-identifier">clientSocket</span><span class="hl-code">.</span><span class="hl-identifier">getOutputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 取得傳送資料的輸出檔。</span><span class="hl-code"> </span><span class="hl-identifier">clientIn</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DataInputStream</span><span class="hl-brackets">(</span><span class="hl-identifier">clientSocket</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 取得接收資料的輸入檔。</span><span class="hl-code"> </span><span class="hl-identifier">serverSocket</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-brackets">(</span><span class="hl-identifier">proxy</span><span class="hl-code">.</span><span class="hl-identifier">serverHost</span><span class="hl-code">, </span><span class="hl-identifier">proxy</span><span class="hl-code">.</span><span class="hl-identifier">serverPort</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">serverOut</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DataOutputStream</span><span class="hl-brackets">(</span><span class="hl-identifier">serverSocket</span><span class="hl-code">.</span><span class="hl-identifier">getOutputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 取得傳送資料的輸出檔。</span><span class="hl-code"> </span><span class="hl-identifier">serverIn</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DataInputStream</span><span class="hl-brackets">(</span><span class="hl-identifier">serverSocket</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 取得接收資料的輸入檔。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">begin http session</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">request</span><span class="hl-code"> = </span><span class="hl-identifier">request</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 讀取瀏覽器傳來的請求訊息。</span><span class="hl-code"> </span><span class="hl-identifier">response</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 回應訊息給對方的瀏覽器。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">end http session</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">clientSocket</span><span class="hl-code">.</span><span class="hl-identifier">isClosed</span><span class="hl-brackets">())</span><span class="hl-code"> </span><span class="hl-identifier">clientSocket</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">serverSocket</span><span class="hl-code">.</span><span class="hl-identifier">isClosed</span><span class="hl-brackets">())</span><span class="hl-code"> </span><span class="hl-identifier">serverSocket</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">request</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// read request form client</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">head</span><span class="hl-code"> = </span><span class="hl-identifier">readHead</span><span class="hl-brackets">(</span><span class="hl-identifier">clientIn</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">=========request:head============</span><span class="hl-special">\r\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">head</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">byte</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">content</span><span class="hl-code"> = </span><span class="hl-identifier">readContent</span><span class="hl-brackets">(</span><span class="hl-identifier">head</span><span class="hl-code">, </span><span class="hl-identifier">clientIn</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// send request to server</span><span class="hl-code"> </span><span class="hl-identifier">serverOut</span><span class="hl-code">.</span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-identifier">head</span><span class="hl-code">.</span><span class="hl-identifier">getBytes</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">UTF-8</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">content</span><span class="hl-code"> != </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">serverOut</span><span class="hl-code">.</span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-identifier">content</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">head</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">response</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// read response form server</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">head</span><span class="hl-code"> = </span><span class="hl-identifier">readHead</span><span class="hl-brackets">(</span><span class="hl-identifier">serverIn</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">=========response:head===========</span><span class="hl-special">\r\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">head</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">byte</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">content</span><span class="hl-code"> = </span><span class="hl-identifier">readContent</span><span class="hl-brackets">(</span><span class="hl-identifier">head</span><span class="hl-code">, </span><span class="hl-identifier">serverIn</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// send response to client</span><span class="hl-code"> </span><span class="hl-identifier">clientOut</span><span class="hl-code">.</span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-identifier">head</span><span class="hl-code">.</span><span class="hl-identifier">getBytes</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">UTF-8</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">content</span><span class="hl-code"> != </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">clientOut</span><span class="hl-code">.</span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-identifier">content</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">proxyConnection</span><span class="hl-code">=</span><span class="hl-identifier">innerText</span><span class="hl-brackets">(</span><span class="hl-identifier">head</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">Proxy-Connection:</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyConnection=</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">proxyConnection</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// if (proxyConnection==null || proxyConnection.toLowerCase().trim().equals(&quot;close&quot;))</span><span class="hl-code"> </span><span class="hl-reserved">throw</span><span class="hl-code"> </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">connection close</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">innerText</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pText</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">beginMark</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">endMark</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">beginStart</span><span class="hl-code"> = </span><span class="hl-identifier">pText</span><span class="hl-code">.</span><span class="hl-identifier">indexOf</span><span class="hl-brackets">(</span><span class="hl-identifier">beginMark</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">beginStart</span><span class="hl-code"> &lt; </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-reserved">null</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">beginEnd</span><span class="hl-code"> = </span><span class="hl-identifier">beginStart</span><span class="hl-code">+</span><span class="hl-identifier">beginMark</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">endStart</span><span class="hl-code"> = </span><span class="hl-identifier">pText</span><span class="hl-code">.</span><span class="hl-identifier">indexOf</span><span class="hl-brackets">(</span><span class="hl-identifier">endMark</span><span class="hl-code">, </span><span class="hl-identifier">beginEnd</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">endStart</span><span class="hl-code"> &lt; </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-reserved">null</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">pText</span><span class="hl-code">.</span><span class="hl-identifier">substring</span><span class="hl-brackets">(</span><span class="hl-identifier">beginEnd</span><span class="hl-code">, </span><span class="hl-identifier">endStart</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">readHead</span><span class="hl-brackets">(</span><span class="hl-identifier">DataInputStream</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">head</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;&quot;</span><span class="hl-code">; </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 讀取到第一個空白行為止，這是標頭訊息。</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">line</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">line</span><span class="hl-code"> == </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-identifier">head</span><span class="hl-code"> += </span><span class="hl-identifier">line</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">line</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-brackets">()</span><span class="hl-code"> == </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">head</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">byte</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">readContent</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">head</span><span class="hl-code">, </span><span class="hl-identifier">DataInputStream</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 根據 Content-Length: ，讀取到第一個空白行後面的區塊。</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">lengthStr</span><span class="hl-code"> = </span><span class="hl-identifier">innerText</span><span class="hl-brackets">(</span><span class="hl-identifier">head</span><span class="hl-code">.</span><span class="hl-identifier">toLowerCase</span><span class="hl-brackets">()</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">content-length:</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">*contentLength:</span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">lengthStr</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">lengthStr</span><span class="hl-code"> != </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">contentLength</span><span class="hl-code"> = </span><span class="hl-identifier">Integer</span><span class="hl-code">.</span><span class="hl-identifier">parseInt</span><span class="hl-brackets">(</span><span class="hl-identifier">lengthStr</span><span class="hl-code">.</span><span class="hl-identifier">trim</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-types">byte</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">content</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-types">byte</span><span class="hl-brackets">[</span><span class="hl-identifier">contentLength</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">read</span><span class="hl-brackets">(</span><span class="hl-identifier">content</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">content</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-reserved">null</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:telnet</guid>
				<title>Java 網路程式設計 -- Telnet</title>
				<link>http://ccckmit.wikidot.com/jn:telnet</link>
				<description>

&lt;p&gt;在本文中，我們設計了一個稱為 Telnet.java 的程式，以實作 Telnet 的功能。該程式同時是 Client 端，也是 Server 端，因此其架構上是一個 P2P 的程式。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 02:22:54 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>在本文中，我們設計了一個稱為 Telnet.java 的程式，以實作 Telnet 的功能。該程式同時是 Client 端，也是 Server 端，因此其架構上是一個 P2P 的程式。</p> <p>使用時，必須先用 java Telnet server 指令執行伺服端，然後再用 java Telnet &lt;server_ip&gt; 指令執行 Client 端，如此就可以在 Client 端對伺服端下指令，就好像 Server 端的電腦完全受到 Client 端操控一般。其程式如以下的 Telnet.java 所示。</p> <h1><span>程式: Telnet.java</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-comment">/* Protocol : Client ----------- Server * * &lt;--------- &lt;path&gt; (single line) * (single line) &lt;cmd&gt; ----------&gt; * &lt;--------- &lt;output&gt; (several lines) * &lt;--------- ==end== (single line) * * another session started again * * &lt;--------- &lt;path&gt; (single line) * ..... */</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">Telnet</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code"> = </span><span class="hl-number">23</span><span class="hl-code">; </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">final</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">endMsg</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">==end==</span><span class="hl-quotes">&quot;</span><span class="hl-code">; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">equals</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">server</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-identifier">runServer</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">.</span><span class="hl-identifier">equals</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">client</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-identifier">runClient</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Client : java Telnet client ip</span><span class="hl-special">\r\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">+ </span><span class="hl-quotes">&quot;</span><span class="hl-string">Server : java Telnet server</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">runClient</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">host</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Host </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">host</span><span class="hl-code"> + </span><span class="hl-quotes">&quot;</span><span class="hl-string">; port </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-brackets">(</span><span class="hl-identifier">host</span><span class="hl-code">, </span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">CommandClient</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-brackets">)</span><span class="hl-code">.</span><span class="hl-identifier">start</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Connected OK</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">runServer</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">ServerSocket</span><span class="hl-code"> </span><span class="hl-identifier">server</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">ServerSocket</span><span class="hl-brackets">(</span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 建立ServerSocket物件</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 建立客戶端Socket物件</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-identifier">server</span><span class="hl-code">.</span><span class="hl-identifier">accept</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Accept Connection From : </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInetAddress</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">CommandServer</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-brackets">)</span><span class="hl-code">.</span><span class="hl-identifier">start</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">Command</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">ProcessBuilder</span><span class="hl-code"> </span><span class="hl-identifier">pb</span><span class="hl-code">; </span><span class="hl-identifier">Command</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">pb</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">ProcessBuilder</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">directory</span><span class="hl-brackets">(</span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">File</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">.</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">exec</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">command</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">outMsg</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;&quot;</span><span class="hl-code">, </span><span class="hl-identifier">errMsg</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;&quot;</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">command</span><span class="hl-code">.</span><span class="hl-identifier">startsWith</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">cd </span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">path</span><span class="hl-code"> = </span><span class="hl-identifier">command</span><span class="hl-code">.</span><span class="hl-identifier">substring</span><span class="hl-brackets">(</span><span class="hl-number">3</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">path</span><span class="hl-code">.</span><span class="hl-identifier">equals</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-special">\\</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">tPath</span><span class="hl-code"> = </span><span class="hl-identifier">getPath</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">rootPath</span><span class="hl-code"> = </span><span class="hl-identifier">tPath</span><span class="hl-code">.</span><span class="hl-identifier">substring</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">,</span><span class="hl-number">3</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">File</span><span class="hl-code"> </span><span class="hl-identifier">root</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">File</span><span class="hl-brackets">(</span><span class="hl-identifier">rootPath</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">directory</span><span class="hl-brackets">(</span><span class="hl-identifier">root</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">File</span><span class="hl-code"> </span><span class="hl-identifier">dir</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">File</span><span class="hl-brackets">(</span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">directory</span><span class="hl-brackets">()</span><span class="hl-code">, </span><span class="hl-identifier">path</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">directory</span><span class="hl-brackets">(</span><span class="hl-identifier">dir</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">errMsg</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">Error: </span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">toString</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">cmd</span><span class="hl-code"> = </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-quotes">&quot;</span><span class="hl-string">cmd.exe</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">/C</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">command</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code">; </span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">command</span><span class="hl-brackets">(</span><span class="hl-identifier">cmd</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">Process</span><span class="hl-code"> </span><span class="hl-identifier">process</span><span class="hl-code"> = </span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">start</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 取得命令執行的結果串流結果傳回給 Client.</span><span class="hl-code"> </span><span class="hl-comment">// 請注意 process.getInputStream() 取得的是 command 的輸出串流，</span><span class="hl-code"> </span><span class="hl-comment">// 被重導到輸入串流以利讀取的結果 (這在概念上很怪，但確實如此)</span><span class="hl-code"> </span><span class="hl-identifier">outMsg</span><span class="hl-code"> = </span><span class="hl-identifier">readAll</span><span class="hl-brackets">(</span><span class="hl-identifier">process</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 取得命令執行的錯誤串流結果傳回給 Client.</span><span class="hl-code"> </span><span class="hl-identifier">errMsg</span><span class="hl-code"> = </span><span class="hl-identifier">readAll</span><span class="hl-brackets">(</span><span class="hl-identifier">process</span><span class="hl-code">.</span><span class="hl-identifier">getErrorStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">process</span><span class="hl-code">.</span><span class="hl-identifier">waitFor</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 等待命令執行完畢</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">outMsg</span><span class="hl-code">+</span><span class="hl-identifier">errMsg</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">getPath</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">pb</span><span class="hl-code">.</span><span class="hl-identifier">directory</span><span class="hl-brackets">()</span><span class="hl-code">.</span><span class="hl-identifier">getCanonicalPath</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">readAll</span><span class="hl-brackets">(</span><span class="hl-identifier">InputStream</span><span class="hl-code"> </span><span class="hl-identifier">is</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">StringBuffer</span><span class="hl-code"> </span><span class="hl-identifier">rzText</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">StringBuffer</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">BufferedReader</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">BufferedReader</span><span class="hl-brackets">(</span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">InputStreamReader</span><span class="hl-brackets">(</span><span class="hl-identifier">is</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">line</span><span class="hl-code">; </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">((</span><span class="hl-identifier">line</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">())</span><span class="hl-code"> != </span><span class="hl-reserved">null</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">rzText</span><span class="hl-code">.</span><span class="hl-identifier">append</span><span class="hl-brackets">(</span><span class="hl-identifier">line</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-special">\r\n</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">rzText</span><span class="hl-code">.</span><span class="hl-identifier">toString</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">CommandServer</span><span class="hl-code"> </span><span class="hl-reserved">extends</span><span class="hl-code"> </span><span class="hl-identifier">Thread</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code">; </span><span class="hl-identifier">BufferedReader</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code">; </span><span class="hl-identifier">PrintStream</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">; </span><span class="hl-identifier">Command</span><span class="hl-code"> </span><span class="hl-identifier">command</span><span class="hl-code">; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">CommandServer</span><span class="hl-brackets">(</span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">s</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-identifier">s</span><span class="hl-code">; </span><span class="hl-identifier">in</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">BufferedReader</span><span class="hl-brackets">(</span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">InputStreamReader</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">()))</span><span class="hl-code">; </span><span class="hl-identifier">out</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">PrintStream</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getOutputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">command</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Command</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">command</span><span class="hl-code">.</span><span class="hl-identifier">getPath</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// set path to client</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">flush</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">cmd</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// read command from client</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInetAddress</span><span class="hl-brackets">()</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-string"> $ </span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">cmd</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">rzMsg</span><span class="hl-code"> = </span><span class="hl-identifier">command</span><span class="hl-code">.</span><span class="hl-identifier">exec</span><span class="hl-brackets">(</span><span class="hl-identifier">cmd</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// execute command</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">print</span><span class="hl-brackets">(</span><span class="hl-identifier">rzMsg</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">Telnet</span><span class="hl-code">.</span><span class="hl-identifier">endMsg</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 輸出結束訊息</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">flush</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">CommandClient</span><span class="hl-code"> </span><span class="hl-reserved">extends</span><span class="hl-code"> </span><span class="hl-identifier">Thread</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code">; </span><span class="hl-identifier">BufferedReader</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code">, </span><span class="hl-identifier">stdin</span><span class="hl-code">; </span><span class="hl-identifier">PrintStream</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">CommandClient</span><span class="hl-brackets">(</span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">s</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-identifier">s</span><span class="hl-code">; </span><span class="hl-identifier">in</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">BufferedReader</span><span class="hl-brackets">(</span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">InputStreamReader</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">()))</span><span class="hl-code">; </span><span class="hl-identifier">out</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">PrintStream</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getOutputStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">stdin</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">BufferedReader</span><span class="hl-brackets">(</span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">InputStreamReader</span><span class="hl-brackets">(</span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">in</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Accept from : </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInetAddress</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">path</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// read path from server</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">print</span><span class="hl-brackets">(</span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">getInetAddress</span><span class="hl-brackets">()</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-string"> $ </span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">path</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-string">&gt;</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">cmd</span><span class="hl-code"> = </span><span class="hl-identifier">stdin</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// read command from console</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">cmd</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// send command to server</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// read output of command from server</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">line</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readLine</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">line</span><span class="hl-code">.</span><span class="hl-identifier">equals</span><span class="hl-brackets">(</span><span class="hl-identifier">Telnet</span><span class="hl-code">.</span><span class="hl-identifier">endMsg</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">line</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>執行結果</span></h1> <h2><span>編譯</span></h2> <div class="code"> <pre><code>D:\java&gt;javac Telnet.java</code></pre></div> <h2><span>伺服端：Telnet Server</span></h2> <div class="code"> <pre><code>D:\java&gt;java Telnet server Accept Connection From : /127.0.0.1 /127.0.0.1 $ SET JAVA_HOME /127.0.0.1 $ dir Telnet.java</code></pre></div> <h2><span>伺服端：Telnet Client 127.0.0.1</span></h2> <div class="code"> <pre><code>D:\java&gt;java Telnet client 127.0.0.1 Host 127.0.0.1; port 23 Connected OK Accept from : /127.0.0.1 /127.0.0.1 $ D:\java&gt;SET JAVA_HOME JAVA_HOME=C:\Program Files\liftweb-1.0.1\jre /127.0.0.1 $ D:\java&gt;dir Telnet.java 磁碟區 D 中的磁碟沒有標籤。 磁碟區序號: AC7E-23A4 D:\java 的目錄 2007/05/16 上午 11:23 4,862 Telnet.java 1 個檔案 4,862 位元組 0 個目錄 8,863,780,864 位元組可用</code></pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:pagedownload</guid>
				<title>Java 網路程式設計 -- 網頁下載</title>
				<link>http://ccckmit.wikidot.com/jn:pagedownload</link>
				<description>

&lt;p&gt;本文示範如何用 Java 程式下載一個網頁，因此筆者撰寫了一個稱為 UrlDownload 的類別，使用方法為 java &amp;lt;url&amp;gt; &amp;lt;file&amp;gt; ，舉例而言，如果您使用 java &lt;a href=&quot;http://tw.yahoo.com/&quot;&gt;http://tw.yahoo.com/&lt;/a&gt; yahoo.htm 指令，就可以將 Yahoo 台灣的首頁下載到 yahoo.htm 這個檔案中。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 02:04:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>本文示範如何用 Java 程式下載一個網頁，因此筆者撰寫了一個稱為 UrlDownload 的類別，使用方法為 java &lt;url&gt; &lt;file&gt; ，舉例而言，如果您使用 java <a href="http://tw.yahoo.com/">http://tw.yahoo.com/</a> yahoo.htm 指令，就可以將 Yahoo 台灣的首頁下載到 yahoo.htm 這個檔案中。</p> <h1><span>程式：UrlDownload.java</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">util</span><span class="hl-code">.*; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">UrlDownload</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 主程式: 用法 java &lt;url&gt; &lt;file&gt; &lt;proxy?&gt; &lt;port?&gt;, 範例： java </span><span class="hl-url">http://tw.yahoo.com/</span><span class="hl-comment"> yahoo.htm</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">URL</span><span class="hl-code"> </span><span class="hl-identifier">url</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">URL</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-comment">// 建立URL物件</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code"> == </span><span class="hl-number">4</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">setProxy</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">3</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-comment">// 開啟串流</span><span class="hl-code"> </span><span class="hl-identifier">DataInputStream</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DataInputStream</span><span class="hl-brackets">(</span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">openStream</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">RandomAccessFile</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">RandomAccessFile</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">rw</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">開始下載檔案: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-types">byte</span><span class="hl-code"> </span><span class="hl-identifier">data</span><span class="hl-code">; </span><span class="hl-comment">// 複製檔案</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">data</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-types">byte</span><span class="hl-brackets">)</span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">readByte</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">writeByte</span><span class="hl-brackets">(</span><span class="hl-identifier">data</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-brackets">(</span><span class="hl-identifier">EOFException</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">檔案下載成功......</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉串流</span><span class="hl-code"> </span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">setProxy</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pProxy</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">Properties</span><span class="hl-code"> </span><span class="hl-identifier">systemSettings</span><span class="hl-code"> = </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">getProperties</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxySet</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">true</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyHost</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">pProxy</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">systemSettings</span><span class="hl-code">.</span><span class="hl-identifier">put</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">proxyPort</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">setProperties</span><span class="hl-brackets">(</span><span class="hl-identifier">systemSettings</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>執行結果</span></h1> <p>一般而言，使用者只要下 java UrlDownload &lt;url&gt; &lt;file&gt; 就能將網址 &lt;url&gt; 上的網頁下載到檔案 &lt;file&gt; 中，但是由於筆者是在金門大學的校內進行的測試，因此必須透過 proxy 才能連接到校外，所以必須使用 java UrlDownload &lt;url&gt; &lt;file&gt; &lt;proxy&gt; &lt;port&gt; 等具有四個參數的語法，才能正確的進行下載。以下是筆者的執行結果。</p> <div class="code"> <pre><code>D:\java&gt;javac UrlDownload.java D:\java&gt;java UrlDownload http://tw.yahoo.com/ yahoo.htm proxy.internal 3128 開始下載檔案: yahoo.htm 檔案下載成功......</code></pre></div> <div class="image-container aligncenter"><img src="http://ccckmit.wdfiles.com/local--files/jn:pagedownload/UrlDownload.png" alt="UrlDownload.png" class="image" /></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:tcp</guid>
				<title>Java 網路程式設計 -- TCP</title>
				<link>http://ccckmit.wikidot.com/jn:tcp</link>
				<description>

&lt;h1&gt;&lt;span&gt;程式：TcpServer.java&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:42:47 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <h1><span>程式：TcpServer.java</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-comment">// 1. 本程式必須與 TcpClient.java 程式搭配執行，先執行本程式再執行 UdpClient。</span><span class="hl-code"> </span><span class="hl-comment">// 2. 執行方法 : java TcpServer</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">TcpServer</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code"> = </span><span class="hl-number">20</span><span class="hl-code">; </span><span class="hl-comment">// 連接埠</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">ServerSocket</span><span class="hl-code"> </span><span class="hl-identifier">ss</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">ServerSocket</span><span class="hl-brackets">(</span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 建立 TCP 伺服器。</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 不斷的接收處理輸入訊息。</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">sc</span><span class="hl-code"> = </span><span class="hl-identifier">ss</span><span class="hl-code">.</span><span class="hl-identifier">accept</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 接收輸入訊息。</span><span class="hl-code"> </span><span class="hl-identifier">OutputStream</span><span class="hl-code"> </span><span class="hl-identifier">os</span><span class="hl-code"> = </span><span class="hl-identifier">sc</span><span class="hl-code">.</span><span class="hl-identifier">getOutputStream</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 取得輸出串流。</span><span class="hl-code"> </span><span class="hl-identifier">os</span><span class="hl-code">.</span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">From Server : Hi !</span><span class="hl-quotes">&quot;</span><span class="hl-code">.</span><span class="hl-identifier">getBytes</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">UTF-8</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">))</span><span class="hl-code">;</span><span class="hl-comment">// 送訊息到 Client 端。</span><span class="hl-code"> </span><span class="hl-identifier">os</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉輸出串流。</span><span class="hl-code"> </span><span class="hl-identifier">sc</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉 TCP 伺服器。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>程式：TcpClient.java</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-comment">// 1. 本程式必須與 TcpServer.java 程式搭配執行，先執行 TcpServer 再執行本程式。</span><span class="hl-code"> </span><span class="hl-comment">// 2. 本程式必須有一個參數，指定伺服器的 IP。</span><span class="hl-code"> </span><span class="hl-comment">// 用法範例： java TcpClient 127.0.0.1</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">TcpClient</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code"> = </span><span class="hl-number">20</span><span class="hl-code">; </span><span class="hl-comment">// 設定傳送埠為 20。</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-code"> </span><span class="hl-identifier">client</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Socket</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 根據 args[0] 的 TCP Socket.</span><span class="hl-code"> </span><span class="hl-identifier">InputStream</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code"> = </span><span class="hl-identifier">client</span><span class="hl-code">.</span><span class="hl-identifier">getInputStream</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 取得輸入訊息的串流</span><span class="hl-code"> </span><span class="hl-identifier">StringBuffer</span><span class="hl-code"> </span><span class="hl-identifier">buf</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">StringBuffer</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 建立讀取字串。</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-reserved">true</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 不斷讀取。</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">x</span><span class="hl-code"> = </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">read</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 讀取一個 byte。(read 傳回 -1 代表串流結束)</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code">==-</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-comment">// x = -1 代表串流結束，讀取完畢，用 break 跳開。</span><span class="hl-code"> </span><span class="hl-types">byte</span><span class="hl-code"> </span><span class="hl-identifier">b</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-types">byte</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">x</span><span class="hl-code">; </span><span class="hl-comment">// 將 x 轉為 byte，放入變數 b.</span><span class="hl-code"> </span><span class="hl-identifier">buf</span><span class="hl-code">.</span><span class="hl-identifier">append</span><span class="hl-brackets">((</span><span class="hl-types">char</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">b</span><span class="hl-brackets">)</span><span class="hl-code">;</span><span class="hl-comment">// 假設傳送ASCII字元都是 ASCII。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">in</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉輸入串流。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">buf</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 印出接收到的訊息。</span><span class="hl-code"> </span><span class="hl-identifier">client</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉 TcpSocket.</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>執行結果</span></h1> <h2><span>編譯</span></h2> <div class="code"> <pre><code>D:\java&gt;javac TcpServer.java D:\java&gt;javac TcpClient.java</code></pre></div> <h2><span>TcpServer</span></h2> <div class="code"> <pre><code>D:\java&gt;java TcpServer</code></pre></div> <h2><span>TcpClient</span></h2> <div class="code"> <pre><code>D:\java&gt;java TcpClient 127.0.0.1 From Server : Hi !</code></pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:udp</guid>
				<title>Java 網路程式設計 -- UDP</title>
				<link>http://ccckmit.wikidot.com/jn:udp</link>
				<description>

&lt;p&gt;在本範例中，我們建立了一個 UDP 封包的 Server，佔用 port 5555，然後利用 UDP Client 連續的發送 100 個封包給 Server。&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:30:54 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>在本範例中，我們建立了一個 UDP 封包的 Server，佔用 port 5555，然後利用 UDP Client 連續的發送 100 個封包給 Server。</p> <p>UDPServer 的工作是，每當收到一個封包就會印出來。但是由於 UDP Client 連續發送封包的速度太快了，導至伺服器來不及接收，於是有些封包因此而遺失了，因此在執行結果中，您會看到 UDPServer 只收到了 55 個封包，而非 UDP Client 所送出的 100 個。</p> <h1><span>程式範例: UDPServer.java</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-comment">// 1. 本程式必須與 UdpClient.java 程式搭配執行，先執行本程式再執行 UdpClient。</span><span class="hl-code"> </span><span class="hl-comment">// 2. 執行方法 : java UdpServer</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">UdpServer</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code">; </span><span class="hl-comment">// 連接埠</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">UdpServer</span><span class="hl-code"> </span><span class="hl-identifier">server</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">UdpServer</span><span class="hl-brackets">(</span><span class="hl-number">5555</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 建立 UdpServer 伺服器物件。</span><span class="hl-code"> </span><span class="hl-identifier">server</span><span class="hl-code">.</span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 執行該伺服器。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">UdpServer</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">pPort</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code"> = </span><span class="hl-identifier">pPort</span><span class="hl-code">; </span><span class="hl-comment">// 設定連接埠。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">final</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">SIZE</span><span class="hl-code"> = </span><span class="hl-number">8192</span><span class="hl-code">; </span><span class="hl-comment">// 設定最大的訊息大小為 8192.</span><span class="hl-code"> </span><span class="hl-types">byte</span><span class="hl-code"> </span><span class="hl-identifier">buffer</span><span class="hl-brackets">[]</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-types">byte</span><span class="hl-brackets">[</span><span class="hl-identifier">SIZE</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-comment">// 設定訊息暫存區</span><span class="hl-code"> </span><span class="hl-reserved">for</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; ; </span><span class="hl-identifier">count</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">DatagramPacket</span><span class="hl-code"> </span><span class="hl-identifier">packet</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DatagramPacket</span><span class="hl-brackets">(</span><span class="hl-identifier">buffer</span><span class="hl-code">, </span><span class="hl-identifier">buffer</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">DatagramSocket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DatagramSocket</span><span class="hl-brackets">(</span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 設定接收的 UDP Socket.</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">receive</span><span class="hl-brackets">(</span><span class="hl-identifier">packet</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 接收封包。</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">msg</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-brackets">(</span><span class="hl-identifier">buffer</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-identifier">packet</span><span class="hl-code">.</span><span class="hl-identifier">getLength</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-comment">// 將接收訊息轉換為字串。</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-identifier">count</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-string"> : receive = </span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">msg</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 印出接收到的訊息。</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉 UDP Socket.</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>程式範例: UDPClient.java</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-comment">// 1. 本程式必須與 UdpServer.java 程式搭配執行，先執行 UdpServer 再執行本程式。</span><span class="hl-code"> </span><span class="hl-comment">// 2. 本程式必須有一個參數，指定伺服器的 IP。</span><span class="hl-code"> </span><span class="hl-comment">// 用法範例： java UdpClient 127.0.0.1</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">UdpClient</span><span class="hl-code"> </span><span class="hl-reserved">extends</span><span class="hl-code"> </span><span class="hl-identifier">Thread</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code">; </span><span class="hl-comment">// port : 連接埠</span><span class="hl-code"> </span><span class="hl-identifier">InetAddress</span><span class="hl-code"> </span><span class="hl-identifier">server</span><span class="hl-code">; </span><span class="hl-comment">// InetAddress 是 IP, 此處的 server 指的是伺服器 IP</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">msg</span><span class="hl-code">; </span><span class="hl-comment">// 欲傳送的訊息，每個 UdpClient 只能傳送一個訊息。</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">for</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">i</span><span class="hl-code">=</span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">&lt;</span><span class="hl-number">100</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-comment">// 建立 UdpClient，設定傳送對象與傳送訊息。</span><span class="hl-code"> </span><span class="hl-identifier">UdpClient</span><span class="hl-code"> </span><span class="hl-identifier">client</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">UdpClient</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-number">5555</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">UdpClient : </span><span class="hl-quotes">&quot;</span><span class="hl-code">+</span><span class="hl-identifier">i</span><span class="hl-code">+</span><span class="hl-quotes">&quot;</span><span class="hl-string">th message</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">client</span><span class="hl-code">.</span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 啟動 UdpClient 開始傳送。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-identifier">UdpClient</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pServer</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">pPort</span><span class="hl-code">, </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">pMsg</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">throws</span><span class="hl-code"> </span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">port</span><span class="hl-code"> = </span><span class="hl-identifier">pPort</span><span class="hl-code">; </span><span class="hl-comment">// 設定連接埠</span><span class="hl-code"> </span><span class="hl-identifier">server</span><span class="hl-code"> = </span><span class="hl-identifier">InetAddress</span><span class="hl-code">.</span><span class="hl-identifier">getByName</span><span class="hl-brackets">(</span><span class="hl-identifier">pServer</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 將伺服器網址轉換為 IP。</span><span class="hl-code"> </span><span class="hl-identifier">msg</span><span class="hl-code"> = </span><span class="hl-identifier">pMsg</span><span class="hl-code">; </span><span class="hl-comment">// 設定傳送訊息。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">run</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">byte</span><span class="hl-code"> </span><span class="hl-identifier">buffer</span><span class="hl-brackets">[]</span><span class="hl-code"> = </span><span class="hl-identifier">msg</span><span class="hl-code">.</span><span class="hl-identifier">getBytes</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 將訊息字串 msg 轉換為位元串。</span><span class="hl-code"> </span><span class="hl-comment">// 封裝該位元串成為封包 DatagramPacket，同時指定傳送對象。</span><span class="hl-code"> </span><span class="hl-identifier">DatagramPacket</span><span class="hl-code"> </span><span class="hl-identifier">packet</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DatagramPacket</span><span class="hl-brackets">(</span><span class="hl-identifier">buffer</span><span class="hl-code">, </span><span class="hl-identifier">buffer</span><span class="hl-code">.</span><span class="hl-identifier">length</span><span class="hl-code">, </span><span class="hl-identifier">server</span><span class="hl-code">, </span><span class="hl-identifier">port</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">DatagramSocket</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">DatagramSocket</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 建立傳送的 UDP Socket。</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">send</span><span class="hl-brackets">(</span><span class="hl-identifier">packet</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// 傳送</span><span class="hl-code"> </span><span class="hl-identifier">socket</span><span class="hl-code">.</span><span class="hl-identifier">close</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-comment">// 關閉 UDP socket.</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-comment">// 若有錯誤產生，列印函數呼叫堆疊。</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>執行結果</span></h1> <h2><span>UDP Server</span></h2> <div class="code"> <pre><code>D:\java&gt;javac UdpServer.java D:\java&gt;javac UdpClient.java D:\java&gt;java UdpServer 0 : receive = UdpClient : 0th message 1 : receive = UdpClient : 1th message 2 : receive = UdpClient : 2th message 3 : receive = UdpClient : 3th message 4 : receive = UdpClient : 4th message 5 : receive = UdpClient : 6th message 6 : receive = UdpClient : 10th message 7 : receive = UdpClient : 12th message 8 : receive = UdpClient : 15th message 9 : receive = UdpClient : 16th message 10 : receive = UdpClient : 17th message 11 : receive = UdpClient : 18th message 12 : receive = UdpClient : 19th message 13 : receive = UdpClient : 23th message 14 : receive = UdpClient : 24th message 15 : receive = UdpClient : 29th message 16 : receive = UdpClient : 31th message 17 : receive = UdpClient : 33th message 18 : receive = UdpClient : 34th message 19 : receive = UdpClient : 35th message 20 : receive = UdpClient : 36th message 21 : receive = UdpClient : 37th message 22 : receive = UdpClient : 38th message 23 : receive = UdpClient : 39th message 24 : receive = UdpClient : 41th message 25 : receive = UdpClient : 42th message 26 : receive = UdpClient : 46th message 27 : receive = UdpClient : 49th message 28 : receive = UdpClient : 55th message 29 : receive = UdpClient : 56th message 30 : receive = UdpClient : 57th message 31 : receive = UdpClient : 58th message 32 : receive = UdpClient : 59th message 33 : receive = UdpClient : 60th message 34 : receive = UdpClient : 62th message 35 : receive = UdpClient : 64th message 36 : receive = UdpClient : 66th message 37 : receive = UdpClient : 67th message 38 : receive = UdpClient : 68th message 39 : receive = UdpClient : 70th message 40 : receive = UdpClient : 72th message 41 : receive = UdpClient : 74th message 42 : receive = UdpClient : 76th message 43 : receive = UdpClient : 77th message 44 : receive = UdpClient : 78th message 45 : receive = UdpClient : 79th message 46 : receive = UdpClient : 80th message 47 : receive = UdpClient : 81th message 48 : receive = UdpClient : 82th message 49 : receive = UdpClient : 83th message 50 : receive = UdpClient : 84th message 51 : receive = UdpClient : 85th message 52 : receive = UdpClient : 86th message 53 : receive = UdpClient : 90th message 54 : receive = UdpClient : 94th message 55 : receive = UdpClient : 95th message</code></pre></div> <h2><span>UDP Client</span></h2> <div class="code"> <pre><code>D:\java&gt;java UdpClient 127.0.0.1</code></pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:url</guid>
				<title>Url</title>
				<link>http://ccckmit.wikidot.com/jn:url</link>
				<description>

&lt;h1&gt;&lt;span&gt;程式範例&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:25:50 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <h1><span>程式範例</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">UrlParse</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">URL</span><span class="hl-code"> </span><span class="hl-identifier">url</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">URL</span><span class="hl-brackets">(</span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">主機: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getHost</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">埠號: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getPort</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">協定: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getProtocol</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">檔案: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getFile</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">參數: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getQuery</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">引用: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">url</span><span class="hl-code">.</span><span class="hl-identifier">getRef</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-code">.</span><span class="hl-identifier">printStackTrace</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>執行結果</span></h1> <div class="code"> <pre><code>D:\java&gt;javac UrlParse.java D:\java&gt;java UrlParse http://tw.search.yahoo.com/search?p=java 主機: tw.search.yahoo.com 埠號: -1 協定: http 檔案: /search?p=java 參數: p=java 引用: null D:\java&gt;java UrlParse http://tw.search.yahoo.com/search?p=java#anchor 主機: tw.search.yahoo.com 埠號: -1 協定: http 檔案: /search?p=java 參數: p=java 引用: anchor</code></pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:ip</guid>
				<title>Java 網路程式設計 -- IP 查詢</title>
				<link>http://ccckmit.wikidot.com/jn:ip</link>
				<description>

&lt;h1&gt;&lt;span&gt;範例程式&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:12:15 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <h1><span>範例程式</span></h1> <div class="code"> <div class="hl-main"> <pre><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">io</span><span class="hl-code">.*; </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">java</span><span class="hl-code">.</span><span class="hl-identifier">net</span><span class="hl-code">.*; </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-reserved">class</span><span class="hl-code"> </span><span class="hl-identifier">IP</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">public</span><span class="hl-code"> </span><span class="hl-types">static</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-identifier">String</span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-identifier">args</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">String</span><span class="hl-code"> </span><span class="hl-identifier">site</span><span class="hl-code"> = </span><span class="hl-identifier">args</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-reserved">try</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">InetAddress</span><span class="hl-code"> </span><span class="hl-identifier">host</span><span class="hl-code"> = </span><span class="hl-identifier">InetAddress</span><span class="hl-code">.</span><span class="hl-identifier">getByName</span><span class="hl-brackets">(</span><span class="hl-identifier">site</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">網域名稱: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">host</span><span class="hl-code">.</span><span class="hl-identifier">getHostName</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">IP位址: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">host</span><span class="hl-code">.</span><span class="hl-identifier">getHostAddress</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">本機名稱: </span><span class="hl-quotes">&quot;</span><span class="hl-code"> + </span><span class="hl-identifier">InetAddress</span><span class="hl-code">.</span><span class="hl-identifier">getLocalHost</span><span class="hl-brackets">())</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">catch</span><span class="hl-brackets">(</span><span class="hl-identifier">Exception</span><span class="hl-code"> </span><span class="hl-identifier">e</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">System</span><span class="hl-code">.</span><span class="hl-identifier">out</span><span class="hl-code">.</span><span class="hl-identifier">println</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">IP 查詢錯誤!</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code"> ; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span></pre></div> </div> <h1><span>執行結果</span></h1> <div class="code"> <pre><code>D:\java&gt;javac IP.java D:\java&gt;java IP 127.0.0.1 網域名稱: localhost IP位址: 127.0.0.1 本機名稱: ccc-kmit3/192.168.60.155 D:\java&gt;java IP www.google.com.tw 網域名稱: www.google.com.tw IP位址: 64.233.183.99 本機名稱: ccc-kmit3/192.168.60.155</code></pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:basic</guid>
				<title>Java 網路程式設計 -- 簡介</title>
				<link>http://ccckmit.wikidot.com/jn:basic</link>
				<description>

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:main&quot;&gt;Java 網路程式&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:basic&quot;&gt;簡介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:ip&quot;&gt;IP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;newpage&quot; href=&quot;http://ccckmit.wikidot.com/jn:socket&quot;&gt;Socket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:udp&quot;&gt;UDP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:tcp&quot;&gt;TCP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:telnet&quot;&gt;Telnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;newpage&quot; href=&quot;http://ccckmit.wikidot.com/jn:http&quot;&gt;HTTP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;newpage&quot; href=&quot;http://ccckmit.wikidot.com/jn:webserver&quot;&gt;WebServer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:pagedownload&quot;&gt;網頁下載&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;newpage&quot; href=&quot;http://ccckmit.wikidot.com/jn:spider&quot;&gt;網路爬蟲&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:proxy&quot;&gt;Proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ccckmit.wikidot.com/jn:browser&quot;&gt;瀏覽器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;newpage&quot; href=&quot;http://ccckmit.wikidot.com/jn:email&quot;&gt;E-mail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:09:16 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <ul> <li><a href="http://ccckmit.wikidot.com/jn:main">Java 網路程式</a> <ul> <li><a href="http://ccckmit.wikidot.com/jn:basic">簡介</a></li> <li><a href="http://ccckmit.wikidot.com/jn:ip">IP</a></li> <li><a class="newpage" href="http://ccckmit.wikidot.com/jn:socket">Socket</a></li> <li><a href="http://ccckmit.wikidot.com/jn:udp">UDP</a></li> <li><a href="http://ccckmit.wikidot.com/jn:tcp">TCP</a></li> <li><a href="http://ccckmit.wikidot.com/jn:telnet">Telnet</a></li> <li><a class="newpage" href="http://ccckmit.wikidot.com/jn:http">HTTP</a></li> <li><a class="newpage" href="http://ccckmit.wikidot.com/jn:webserver">WebServer</a></li> <li><a href="http://ccckmit.wikidot.com/jn:pagedownload">網頁下載</a></li> <li><a class="newpage" href="http://ccckmit.wikidot.com/jn:spider">網路爬蟲</a></li> <li><a href="http://ccckmit.wikidot.com/jn:proxy">Proxy</a></li> <li><a href="http://ccckmit.wikidot.com/jn:browser">瀏覽器</a></li> <li><a class="newpage" href="http://ccckmit.wikidot.com/jn:email">E-mail</a></li> </ul> </li> </ul> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:modify</guid>
				<title>Java 網路程式設計 -- 最新修改</title>
				<link>http://ccckmit.wikidot.com/jn:modify</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:07:20 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://ccckmit.wikidot.com/jn:main</guid>
				<title>免費電子書 -- Java 網路程式設計</title>
				<link>http://ccckmit.wikidot.com/jn:main</link>
				<description>

&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/avatar.php?userid=296763&amp;amp;amp;size=small&amp;amp;amp;timestamp=1778987957&quot; alt=&quot;ccckmit&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=296763)&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/ccckmit&quot;  &gt;ccckmit&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 08 Nov 2010 01:01:14 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/ccckmit" ><img class="small" src="http://www.wikidot.com/avatar.php?userid=296763&amp;amp;size=small&amp;amp;timestamp=1778987957" alt="ccckmit" style="background-image:url(http://www.wikidot.com/userkarma.php?u=296763)" /></a><a href="http://www.wikidot.com/user:info/ccckmit" >ccckmit</a></span></p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>