<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7390569814137306134</id><updated>2024-09-01T22:23:03.223-07:00</updated><title type='text'>Бичил хичээл</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javahicheel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default'/><link rel='alternate' type='text/html' href='http://javahicheel.blogspot.com/'/><author><name>erka</name><uri>http://www.blogger.com/profile/10477767353401981966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7390569814137306134.post-9038760249619316537</id><published>2006-11-17T01:54:00.000-08:00</published><updated>2006-11-21T20:39:37.698-08:00</updated><title type='text'>Цуурай</title><content type='html'>Таны толилуур вэб үйлчлэгч рүү хүсэлт явуулахдаа толгойн хэсгээ хэрхэн бүрдүүлж буйг үүгээр шалгаж болно.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package web.server;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author java4salhi&lt;br /&gt; */&lt;br /&gt;import java.io.*;&lt;br /&gt;import java.net.*;&lt;br /&gt;&lt;br /&gt;public class HttpEcho&lt;br /&gt;{&lt;br /&gt; public static void main (String args[])&lt;br /&gt; {&lt;br /&gt;  if (args.length == 0)&lt;br /&gt;  {&lt;br /&gt;   System.out.println(&quot;USAGE: java HttpEcho &lt;port number&gt;&quot;);&lt;br /&gt;   return;&lt;br /&gt;  }&lt;br /&gt;   &lt;br /&gt;  &lt;br /&gt;  try {&lt;br /&gt;   int port = Integer.parseInt(args[0]);&lt;br /&gt;   ServerSocket server = new ServerSocket(port);&lt;br /&gt;   System.out.println(&quot;Started HttpEcho on port &quot; + port + &quot;. Press CTRL-C to end.\n&quot;);&lt;br /&gt;   &lt;br /&gt;   while (true)&lt;br /&gt;   {&lt;br /&gt;    Socket client = server.accept();&lt;br /&gt;    BufferedReader in = new BufferedReader(&lt;br /&gt;         new InputStreamReader(client.getInputStream()));&lt;br /&gt;    PrintWriter out = new PrintWriter(client.getOutputStream());&lt;br /&gt;    &lt;br /&gt;    StringBuffer header = new StringBuffer(&quot;&quot;);&lt;br /&gt;    StringBuffer body = new StringBuffer(&quot;&quot;);&lt;br /&gt;    String data;&lt;br /&gt;    int contentLength = 0;&lt;br /&gt;    int pos = 0;&lt;br /&gt;    &lt;br /&gt;    // get the header&lt;br /&gt;    while ((data = in.readLine()) != null)&lt;br /&gt;    {&lt;br /&gt;     // the header ends at the first blank line&lt;br /&gt;     if (data.length() == 0)&lt;br /&gt;      break;&lt;br /&gt;     header.append(data + &quot;\n&quot;);&lt;br /&gt;     pos = data.toLowerCase().indexOf(&quot;content-length:&quot;);&lt;br /&gt;     if (pos &gt;= 0)&lt;br /&gt;      contentLength = Integer.parseInt(data.substring(pos + 15).trim());&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // get the body, if any&lt;br /&gt;    if (contentLength &gt; 0)&lt;br /&gt;    {&lt;br /&gt;     try {&lt;br /&gt;      char[] cbuf = new char[contentLength];&lt;br /&gt;      in.read(cbuf);&lt;br /&gt;      body.append(cbuf);&lt;br /&gt;     }  catch (Exception e)  {&lt;br /&gt;      body.append(&quot;Error: &quot; + e);&lt;br /&gt;     }&lt;br /&gt;    }  else  {&lt;br /&gt;     body.append(&quot;No Body information retrieved. &quot; + &lt;br /&gt;        &quot;Content-Length equals zero or was not specified.&quot;);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // write back to the client&lt;br /&gt;    out.print(&quot;HTTP/1.0 200\nContent Type: text/plain\n\n&quot;);&lt;br /&gt;    out.println(&quot;HEADER:&quot;);&lt;br /&gt;    out.println(header);&lt;br /&gt;    out.println(&quot;BODY:&quot;);&lt;br /&gt;    out.println(body);&lt;br /&gt;    &lt;br /&gt;    // write to the console too&lt;br /&gt;    System.out.println(&quot;HEADER:&quot;);&lt;br /&gt;    System.out.println(header);&lt;br /&gt;    System.out.println(&quot;BODY: (&quot; + contentLength + &quot; / &quot; + body.length() + &quot;)&quot;);&lt;br /&gt;    System.out.println(body);&lt;br /&gt;    System.out.println(&quot;\n============ HttpEcho on Port &quot; + port + &lt;br /&gt;         &quot;. Press CTRL-C to End ============\n&quot;);&lt;br /&gt;    &lt;br /&gt;    // close all the client streams so we can listen again&lt;br /&gt;    out.close();&lt;br /&gt;    in.close();&lt;br /&gt;    client.close();&lt;br /&gt;   }&lt;br /&gt;  }  catch (Exception e)  {&lt;br /&gt;   System.out.println(e);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://javahicheel.blogspot.com/feeds/9038760249619316537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7390569814137306134/9038760249619316537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/9038760249619316537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/9038760249619316537'/><link rel='alternate' type='text/html' href='http://javahicheel.blogspot.com/2006/11/blog-post_17.html' title='Цуурай'/><author><name>erka</name><uri>http://www.blogger.com/profile/10477767353401981966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390569814137306134.post-43061309733550778</id><published>2006-11-16T02:04:00.000-08:00</published><updated>2006-11-16T02:32:24.207-08:00</updated><title type='text'>Бичил вэб үйлчлүүлэгч, хоёрдугаар хэсэг</title><content type='html'>Энэ удаад StringBuffer обьект ашиглан үйлчлэгчээс ирэх хариуны толгойн хэсгийг уншиж байна. Уншихдаа BufferedReader обьектийг, харин хүсэлт илгээхдээ PrintWriter-ийг ашиглажээ.&lt;br /&gt;&lt;br /&gt;Үйлчлэгчээс ирэх хариуны биеийг хэрхэн уншиж буйг бас анхаарагтун.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package web.server;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author &lt;br /&gt; */&lt;br /&gt;public class SimpleClient {&lt;br /&gt;    static int PORT = 1010;&lt;br /&gt;    static String getHeader = &quot;GET / HTTP/1.1&quot;;&lt;br /&gt;    static String agentHeader =&quot;User-Agent: Simple Client&quot;;&lt;br /&gt;    static String hostHeader = &quot;host: %s: %s&quot;;&lt;br /&gt;    &lt;br /&gt;    static Logger logger = Logger.getLogger(&quot;SimpleClient&quot;);&lt;br /&gt;    &lt;br /&gt;    public static void main(String[] args) throws Exception {&lt;br /&gt;        &lt;br /&gt;        String host = &quot;localhost&quot;;&lt;br /&gt;        int port = PORT;&lt;br /&gt;        &lt;br /&gt;        try {&lt;br /&gt;            host = args[0];&lt;br /&gt;        } catch (Exception e) {}&lt;br /&gt;        &lt;br /&gt;        try {&lt;br /&gt;            port = Integer.parseInt(args[1]);&lt;br /&gt;        } catch (Exception e) {}&lt;br /&gt;        &lt;br /&gt;        Socket socket = new Socket( host, port);&lt;br /&gt;        logger.info(&quot;started SimpleClient on port &quot; + socket.getLocalPort());&lt;br /&gt;                &lt;br /&gt;        BufferedReader in = new BufferedReader(&lt;br /&gt;                new InputStreamReader(socket.getInputStream()));&lt;br /&gt;        &lt;br /&gt;        PrintWriter out = new PrintWriter(socket.getOutputStream());&lt;br /&gt;        &lt;br /&gt;        // sending get request&lt;br /&gt;        out.println(getHeader);&lt;br /&gt;        out.println(String.format(hostHeader, host, port));&lt;br /&gt;        out.println(agentHeader);&lt;br /&gt;        &lt;br /&gt;        out.println();&lt;br /&gt;        out.flush();&lt;br /&gt;        &lt;br /&gt;        StringBuffer header = new StringBuffer(&quot;&quot;);&lt;br /&gt;        StringBuffer body = new StringBuffer(&quot;&quot;);&lt;br /&gt;        String data;&lt;br /&gt;        int contentLength = 0;&lt;br /&gt;        int pos = 0;&lt;br /&gt;        &lt;br /&gt;        // get the header&lt;br /&gt;        while ( (data = in.readLine()) != null) {&lt;br /&gt;            &lt;br /&gt;            // the header ends at the first blank line&lt;br /&gt;            if (data.length() == 0)&lt;br /&gt;                break;&lt;br /&gt;            &lt;br /&gt;            header.append(data + &quot;\n&quot;);&lt;br /&gt;            pos = data.toLowerCase().indexOf(&quot;content-length:&quot;);&lt;br /&gt;            if (pos &amp;gt;= 0)&lt;br /&gt;                contentLength = Integer.parseInt(data.substring(pos + 15).trim());&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        // get the body, if any&lt;br /&gt;        if (contentLength &amp;gt; 0) {&lt;br /&gt;            try {&lt;br /&gt;                char[] cbuf = new char[contentLength];&lt;br /&gt;                in.read(cbuf);&lt;br /&gt;                body.append(cbuf);&lt;br /&gt;            }  catch (Exception e)  {&lt;br /&gt;                body.append(&quot;Error: &quot; + e);&lt;br /&gt;            }&lt;br /&gt;        }  else  {&lt;br /&gt;            body.append(&quot;No Body information retrieved. &quot; +&lt;br /&gt;                    &quot;Content-Length equals zero or was not specified.&quot;);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        // write to the console&lt;br /&gt;        System.out.println(&quot;HEADER:&quot;);&lt;br /&gt;        System.out.println(header.toString());&lt;br /&gt;        System.out.println(&quot;BODY: (&quot; + contentLength + &quot; / &quot; + body.length() + &quot;)&quot;);&lt;br /&gt;        System.out.println(body.toString());&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;        // close all the client streams so we can listen again&lt;br /&gt;        out.close();&lt;br /&gt;        in.close();&lt;br /&gt;        socket.close();&lt;br /&gt;        &lt;br /&gt;        logger.info(&quot;SimpleClient ended on port &quot; + socket.getLocalPort());&lt;br /&gt;    }&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://javahicheel.blogspot.com/feeds/43061309733550778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7390569814137306134/43061309733550778' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/43061309733550778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/43061309733550778'/><link rel='alternate' type='text/html' href='http://javahicheel.blogspot.com/2006/11/blog-post_16.html' title='Бичил вэб үйлчлүүлэгч, хоёрдугаар хэсэг'/><author><name>erka</name><uri>http://www.blogger.com/profile/10477767353401981966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390569814137306134.post-1678578482910985496</id><published>2006-11-15T00:31:00.000-08:00</published><updated>2006-11-15T00:45:50.517-08:00</updated><title type='text'>Бичил вэб үйлчлэгч, хоёрдугаар хэсэг</title><content type='html'>Анхны &lt;a href=&quot;http://javahicheel.blogspot.com/2006/11/1.html&quot;&gt;бичил вэб үйлчлэгчийг&lt;/a&gt; бага зэрэг сайжруулан боловсронгуй болгосон хувилбарыг дор харуулав. Энд үйлчлүүлэгчээс ирэх хүсэлтийг уншихдаа InputStream обьектыг бус, харин мэдээллийг мөр, мөрөөр нь унших чадвартай BufferedReader обьектыг ашигласан байна. Мөн мөрийн задаргаа хийх жишээ болгон GET хүсэлт доторхи URL хэсгийг ялган авч харуулав. Ингэснээр URL-ээр өгөгдсөн файлыг үйлчлүүлэгч рүү хариу болгон илгээх зам нээгдэнэ.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package web.server;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.ServerSocket;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.logging.Logger;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Erdenebat Byambaa, USI company&lt;br /&gt;* very simple, very ugly implementation of web server&lt;br /&gt;*/&lt;br /&gt;public class SimpleServer {&lt;br /&gt;&lt;br /&gt;static Logger log = Logger.getLogger(&quot;SimpleServer&quot;);&lt;br /&gt;&lt;br /&gt;static final int PORT = 1010;&lt;br /&gt;static final String NEWLINE = &quot;\r\n&quot;;&lt;br /&gt;static final String OK = &quot;HTTP/1.1 200 OK&quot; + NEWLINE;&lt;br /&gt;&lt;br /&gt;static String WelcomeMessage = &quot;&amp;lt;html&amp;gt;&quot; +&lt;br /&gt;&quot;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Welcome&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&quot; +&lt;br /&gt;&quot;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;&quot; +&lt;br /&gt;&quot;Welcome, Sir/Madame&quot; +&lt;br /&gt;&quot;&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&quot;+&lt;br /&gt;&quot;&amp;lt;/html&amp;gt;&quot;;&lt;br /&gt;static long length = WelcomeMessage.length();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws IOException {&lt;br /&gt;&lt;br /&gt;int port = PORT;&lt;br /&gt;&lt;br /&gt;if (args.length &amp;gt; 0)&lt;br /&gt;port = Integer.parseInt(args[0]);&lt;br /&gt;&lt;br /&gt;System.out.println();&lt;br /&gt;log.info(&quot;SimpleServer is listening on &quot; + port);&lt;br /&gt;System.out.println();&lt;br /&gt;&lt;br /&gt;// creating server socket&lt;br /&gt;ServerSocket server = new ServerSocket(port);&lt;br /&gt;&lt;br /&gt;// main loop&lt;br /&gt;while (true) {&lt;br /&gt;&lt;br /&gt;// accepting a new client&lt;br /&gt;Socket socket = server.accept();&lt;br /&gt;int remotePort = socket.getPort();&lt;br /&gt;&lt;br /&gt;log.info(&quot;accepting new client on &quot; + remotePort);&lt;br /&gt;&lt;br /&gt;InputStream in = socket.getInputStream();&lt;br /&gt;OutputStream out = socket.getOutputStream();&lt;br /&gt;&lt;br /&gt;BufferedReader br = new BufferedReader(new InputStreamReader(in,&quot;UTF-8&quot;));&lt;br /&gt;&lt;br /&gt;String line = br.readLine();&lt;br /&gt;String[] tokens = line.split(&quot; &quot;);&lt;br /&gt;String rawUrl = tokens[1];&lt;br /&gt;&lt;br /&gt;log.info(&quot;requested resource is &quot; + rawUrl);&lt;br /&gt;System.out.println();&lt;br /&gt;&lt;br /&gt;while ( (line = br.readLine()) != null &amp;&amp;amp; !line.equals(&quot;&quot;)) {&lt;br /&gt;for (byte data: line.getBytes()) {&lt;br /&gt;&lt;br /&gt;String hex = Integer.toHexString(data);&lt;br /&gt;hex = (hex.length()==1? &quot;0&quot;+hex: hex);&lt;br /&gt;System.out.print(hex + &quot; &quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;System.out.println(&quot;0d 0a&quot;);&lt;br /&gt;System.out.println(line);&lt;br /&gt;System.out.println();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (line.equals(&quot;&quot;)) {&lt;br /&gt;System.out.println(&quot;0d 0a&quot;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// so, here we have completed receiving data from client&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&quot;sending response ...&quot;);&lt;br /&gt;&lt;br /&gt;// sending OK&lt;br /&gt;out.write(OK.getBytes());&lt;br /&gt;&lt;br /&gt;// starting http header sending&lt;br /&gt;out.write(&quot;Content-Type: text/html&quot;.getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;out.write(&quot;Content-Length: &quot;.getBytes());&lt;br /&gt;out.write(Long.toString(length).getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;out.write(&quot;Date: &quot;.getBytes());&lt;br /&gt;out.write(new Date().toString().getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;out.write(&quot;Server: Simplest Web Server&quot;.getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;// end of header sending&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;// sending body part&lt;br /&gt;out.write(WelcomeMessage.getBytes());&lt;br /&gt;&lt;br /&gt;in.close();&lt;br /&gt;out.close();&lt;br /&gt;socket.close();&lt;br /&gt;&lt;br /&gt;System.out.println();&lt;br /&gt;log.info(&quot;disconnected --- remote port: &quot; + remotePort);&lt;br /&gt;System.out.println();&lt;br /&gt;&lt;br /&gt;} // main loop&lt;br /&gt;&lt;br /&gt;} // main method&lt;br /&gt;&lt;br /&gt;} // SimpleServer&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;хөтөлбөрийн гарц:&lt;/span&gt;&lt;br /&gt;Nov 15, 2006 4:18:25 PM web.server.SimpleServer main&lt;br /&gt;INFO: SimpleServer is listening on 1010&lt;br /&gt;&lt;br /&gt;Nov 15, 2006 4:18:52 PM web.server.SimpleServer main&lt;br /&gt;INFO: accepting new client on 1056&lt;br /&gt;Nov 15, 2006 4:18:52 PM web.server.SimpleServer main&lt;br /&gt;INFO: requested resource is /&lt;br /&gt;&lt;br /&gt;48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a 31 30 31 30 0d 0a&lt;br /&gt;Host: localhost:1010&lt;br /&gt;&lt;br /&gt;55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 57 69 6e 64 6f 77 73 3b 20 55 3b 20 57 69 6e 64 6f 77 73 20 4e 54 20 35 2e 31 3b 20 65 6e 2d 55 53 3b 20 72 76 3a 31 2e 38 2e 30 2e 38 29 20 47 65 63 6b 6f 2f 32 30 30 36 31 30 32 35 20 46 69 72 65 66 6f 78 2f 31 2e 35 2e 30 2e 38 0d 0a&lt;br /&gt;User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 3a 20 74 65 78 74 2f 78 6d 6c 2c 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 6d 6c 2c 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 68 74 6d 6c 2b 78 6d 6c 2c 74 65 78 74 2f 68 74 6d 6c 3b 71 3d 30 2e 39 2c 74 65 78 74 2f 70 6c 61 69 6e 3b 71 3d 30 2e 38 2c 69 6d 61 67 65 2f 70 6e 67 2c 2a 2f 2a 3b 71 3d 30 2e 35 0d 0a&lt;br /&gt;Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 2d 4c 61 6e 67 75 61 67 65 3a 20 65 6e 2d 75 73 2c 65 6e 3b 71 3d 30 2e 35 0d 0a&lt;br /&gt;Accept-Language: en-us,en;q=0.5&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 7a 69 70 2c 64 65 66 6c 61 74 65 0d 0a&lt;br /&gt;Accept-Encoding: gzip,deflate&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 2d 43 68 61 72 73 65 74 3a 20 49 53 4f 2d 38 38 35 39 2d 31 2c 75 74 66 2d 38 3b 71 3d 30 2e 37 2c 2a 3b 71 3d 30 2e 37 0d 0a&lt;br /&gt;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;&lt;br /&gt;4b 65 65 70 2d 41 6c 69 76 65 3a 20 33 30 30 0d 0a&lt;br /&gt;Keep-Alive: 300&lt;br /&gt;&lt;br /&gt;43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 2d 61 6c 69 76 65 0d 0a&lt;br /&gt;Connection: keep-alive&lt;br /&gt;&lt;br /&gt;0d 0a&lt;br /&gt;&lt;br /&gt;sending response ...&lt;br /&gt;Nov 15, 2006 4:18:52 PM web.server.SimpleServer main&lt;br /&gt;INFO: disconnected --- remote port: 1056</content><link rel='replies' type='application/atom+xml' href='http://javahicheel.blogspot.com/feeds/1678578482910985496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7390569814137306134/1678578482910985496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/1678578482910985496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/1678578482910985496'/><link rel='alternate' type='text/html' href='http://javahicheel.blogspot.com/2006/11/blog-post_15.html' title='Бичил вэб үйлчлэгч, хоёрдугаар хэсэг'/><author><name>erka</name><uri>http://www.blogger.com/profile/10477767353401981966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390569814137306134.post-2562199705037442505</id><published>2006-11-13T19:03:00.000-08:00</published><updated>2006-11-13T23:43:48.901-08:00</updated><title type='text'>Бичил вэб үйлчлүүлэгч, нэгдүгээр хэсэг</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/1600/webclient.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/400/webclient.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Маш хялбархан вэб үйлчлүүлэгчийн жишээ хөтөлбөрийг дор харуулав. Үүгээр ямар ч вэб үйлчлэгч рүү GET хүсэлт илгээн хариу авч болно. Гэхдээ хариугаа зөвхөн бичвэр хэлбэрээр авна. Өмнөх хичээлээр бүтээсэн маш хялбархан &lt;a href=&quot;http://javahicheel.blogspot.com/2006/11/1.html&quot;&gt;вэб үйлчлэгчтэй&lt;/a&gt; ярилцсан харилцан яриаг жишээ болгон хавсаргав.&lt;br /&gt;&lt;br /&gt;package web.server;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Erdenebat Byambaa, USI company&lt;br /&gt;*/&lt;br /&gt;public class SimplestClient {&lt;br /&gt;&lt;br /&gt;static int PORT = 1010;&lt;br /&gt;static String NEWLINE = &quot;\r\n&quot;;&lt;br /&gt;static String getHeader = &quot;GET / HTTP/1.1&quot; + NEWLINE;&lt;br /&gt;static String hostHeader = &quot;Host: localhost:&quot; + PORT + NEWLINE;&lt;br /&gt;static String agentHeader =&quot;User-Agent: Simple Client&quot; + NEWLINE;&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws IOException {&lt;br /&gt;&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&quot;SimplestClient: starting...&quot;);&lt;br /&gt;&lt;br /&gt;// connecting to server&lt;br /&gt;Socket socket = new Socket(&quot;localhost&quot;, PORT);&lt;br /&gt;&lt;br /&gt;// obtaining input &amp; output stream from socket&lt;br /&gt;InputStream in = socket.getInputStream();&lt;br /&gt;OutputStream out = socket.getOutputStream();&lt;br /&gt;&lt;br /&gt;// sending GET request to server&lt;br /&gt;out.write(getHeader.getBytes());&lt;br /&gt;out.write(hostHeader.getBytes());&lt;br /&gt;out.write(agentHeader.getBytes());&lt;br /&gt;&lt;br /&gt;// end of request&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// preparing to receive response from server&lt;br /&gt;int data = 0;   // holds single byte;&lt;br /&gt;byte[] line = new byte[256]; // used to compose/collect a line by sequentally reading single byte from input stream&lt;br /&gt;// a line is terminated by two bytes: 13 10&lt;br /&gt;&lt;br /&gt;boolean CR = false;  // true, if data == 13 (or 0d)&lt;br /&gt;boolean NL = false;  // true, if data == 10 (or 0a) and preceding data == 13&lt;br /&gt;int lineCounter = 0;&lt;br /&gt;&lt;br /&gt;System.out.println(&quot;SimplestClient: header start&quot;);&lt;br /&gt;// starting to recieve request from server&lt;br /&gt;while ( (data = in.read()) &amp;gt; -1 ) {&lt;br /&gt;&lt;br /&gt; line[lineCounter] = (byte)data;&lt;br /&gt; lineCounter++;&lt;br /&gt;&lt;br /&gt; String hex = Integer.toHexString(data);&lt;br /&gt; hex = (hex.length()==1? &quot;0&quot;+hex: hex);&lt;br /&gt;&lt;br /&gt; System.out.print(hex + &quot; &quot;);&lt;br /&gt;&lt;br /&gt; // simple state machine used to detect line terminator&lt;br /&gt; switch (data) {&lt;br /&gt;     case 13: CR = true; break;&lt;br /&gt;     case 10: NL = (CR ? true: false); break;&lt;br /&gt;     default: CR = false; NL = false; break;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; if ( CR &amp;&amp;amp; NL ) {&lt;br /&gt;     if (lineCounter == 2) {&lt;br /&gt;         // empty line contains only two bytes: 13 10&lt;br /&gt;         // it happens at the end of request header&lt;br /&gt;         break;&lt;br /&gt;     } else {&lt;br /&gt;&lt;br /&gt;         // reached at the end of line&lt;br /&gt;         // let&#39;s build a string representing a line and print it&lt;br /&gt;         byte[] temp = new byte[lineCounter];&lt;br /&gt;         System.arraycopy(line, 0, temp, 0, lineCounter);&lt;br /&gt;&lt;br /&gt;         System.out.println();                &lt;br /&gt;         System.out.print(new String(temp));&lt;br /&gt;         System.out.println();&lt;br /&gt;&lt;br /&gt;         lineCounter = 0;&lt;br /&gt;         CR = false;&lt;br /&gt;         NL = false;&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}  // end of header part&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&quot;SimplestClient: header end&quot;);&lt;br /&gt;&lt;br /&gt;// starting to receive content part&lt;br /&gt;int contentCounter = 0;&lt;br /&gt;byte[] tempContent = new byte[1024];&lt;br /&gt;&lt;br /&gt;while ( (data = in.read()) &amp;gt; -1 )&lt;br /&gt; tempContent[contentCounter++] = (byte)data;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;byte[] actualContent = new byte[contentCounter];&lt;br /&gt;System.arraycopy(tempContent, 0, actualContent, 0, contentCounter);&lt;br /&gt;&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&quot;SimplestClient: content start&quot;);&lt;br /&gt;System.out.println(&quot;SimplestClient: content length = &quot; + contentCounter);&lt;br /&gt;System.out.println(new String(actualContent));&lt;br /&gt;System.out.println(&quot;SimplestClient: content end&quot;);&lt;br /&gt;System.out.println();&lt;br /&gt;&lt;br /&gt;socket.close();&lt;br /&gt;&lt;br /&gt;System.out.println(&quot;SimplestClient: ending...&quot;);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;энэ хөтөлбөрийн гарц:&lt;br /&gt;&lt;br /&gt;SimplestClient: starting...&lt;br /&gt;SimplestClient: header start&lt;br /&gt;48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d 0a&lt;br /&gt;HTTP/1.1 200 OK&lt;br /&gt;&lt;br /&gt;43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 0d 0a&lt;br /&gt;Content-Type: text/html&lt;br /&gt;&lt;br /&gt;43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 38 39 0d 0a&lt;br /&gt;Content-Length: 89&lt;br /&gt;&lt;br /&gt;44 61 74 65 3a 20 54 75 65 20 4e 6f 76 20 31 34 20 31 31 3a 31 30 3a 30 37 20 55 4c 41 54 20 32 30 30 36 0d 0a&lt;br /&gt;Date: Tue Nov 14 11:10:07 ULAT 2006&lt;br /&gt;&lt;br /&gt;53 65 72 76 65 72 3a 20 53 69 6d 70 6c 65 73 74 20 57 65 62 20 53 65 72 76 65 72 0d 0a&lt;br /&gt;Server: Simplest Web Server&lt;br /&gt;&lt;br /&gt;0d 0a&lt;br /&gt;SimplestClient: header end&lt;br /&gt;&lt;br /&gt;SimplestClient: content start&lt;br /&gt;SimplestClient: content length = 89&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Welcome&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Welcome, Sir/Madame&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;SimplestClient: content end&lt;br /&gt;&lt;br /&gt;SimplestClient: ending...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/1600/simpleclient.0.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/400/simpleclient.0.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://javahicheel.blogspot.com/feeds/2562199705037442505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7390569814137306134/2562199705037442505' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/2562199705037442505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/2562199705037442505'/><link rel='alternate' type='text/html' href='http://javahicheel.blogspot.com/2006/11/blog-post.html' title='Бичил вэб үйлчлүүлэгч, нэгдүгээр хэсэг'/><author><name>erka</name><uri>http://www.blogger.com/profile/10477767353401981966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7390569814137306134.post-5841638025801706990</id><published>2006-11-12T17:29:00.000-08:00</published><updated>2006-11-14T05:24:50.006-08:00</updated><title type='text'>Бичил вэб үйлчлэгч, нэгдүгээр хэсэг</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/1600/simpleserver.1.jpg&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/400/simpleserver.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Ямар нэгэн толилуур (Mozilla, FireFox, Internet Explorer гэх мэт) ашиглан хандсан хэрэглэгч бүр рүү Welcome, Sir/Madame гэсэн мэдээ илгээх маш хялбархан вэб үйлчлэгчийн жишээ хөтөлбөрийг дор харуулав.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;package web.server;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.ServerSocket;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;import java.util.Arrays;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;* @author Erdenebat Byambaa, USI company&lt;br /&gt;* вэб үйлчлэгчийн маш хялбар жишээ хөтөлбөр&lt;br /&gt;*/&lt;br /&gt;public class SimplestServer {&lt;br /&gt;&lt;br /&gt;static final int PORT = 1010;&lt;br /&gt;static final int BUFFER_SIZE = 10000;&lt;br /&gt;static final String NEWLINE = &quot;\r\n&quot;;&lt;br /&gt;static final String OK = &quot;HTTP/1.1 200 OK&quot; + NEWLINE;&lt;br /&gt;static String &lt;span style=&quot;font-weight: bold;&quot;&gt;WelcomeMessage&lt;/span&gt; = &quot;&amp;lt;html&amp;gt;&quot; +&lt;br /&gt;&quot;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Welcome&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&quot; +&lt;br /&gt;&quot;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;&quot; +&lt;br /&gt;&quot;Welcome, Sir/Madame&quot; +&lt;br /&gt;&quot;&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&quot;+&lt;br /&gt;&quot;&amp;lt;/html&amp;gt;&quot;;&lt;br /&gt;static long length = WelcomeMessage.length();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) throws IOException {&lt;br /&gt;&lt;br /&gt;// Тооцоолууруудын хооронд мэдээлэл солилцохдоо Socket буюу Сүв&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;ашигладаг. &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Сүв нь мэдээлэл хүлээн авах үүрэгтэй ServerSocket&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;буюу ҮйлчлэгчСүв, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;мэдээлэл илгээх үүрэгтэй Socket буюу Сүв&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;гэсэн үндсэн хоёр хэлбэртэй. &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Шинээр Сүв үүсгэхдээ портын дугаар&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;буюу боомтын дугаарыг зааж өгнө. &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Боомтын дугаар нь 0-ээс 65535&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хүртэлхи дурын бүхэл тоо байж болно. &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Нэг боомт дээр зөвхөн нэг&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;сүв үүсгэх боломжтой. &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;1024 хүртэлхи бүх боомтууд эзэнтэй байдаг.&lt;br /&gt;&lt;br /&gt;ServerSocket server = new ServerSocket(PORT);&lt;br /&gt;System.out.println(&quot;listening on &quot; + PORT);&lt;br /&gt;&lt;br /&gt;// үндсэн эргүүлэг&lt;br /&gt;// аливаа үйлчлэгч хөтөлбөр битүү тойргоор тойрон эргэлдэх&lt;br /&gt;// зарчимтай.&lt;br /&gt;while (true) {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// ҮйлчлэгчСүв нь өөрийн боомт дээр гаднаас мэдээлэл ирж буй эсэхийг&lt;br /&gt;// байнга шалгаж байдаг. Хэрвээ гаднаас мэдээлэл ирэхгүй бол  цааш&lt;br /&gt;// хөдлөхгүй. Үүнийг сонсох гэнэ.&lt;br /&gt;&lt;br /&gt;// Хэрэв гаднаас мэдээлэл ирвэл ямар нэгэн сул чөлөөтэй&lt;br /&gt;// боомт дээр сүв үүсгэнэ. Сүв гэдгийг өөрөөр нүх гэж ойлгож болно.&lt;br /&gt;// Шинээр үүссэн Сүв нь гаднаас холбогдсон нөгөө тооцоолуурын сүвтэй&lt;br /&gt;// холбогдохоороо нэг төрлийн хоолой үүсгэнэ.&lt;br /&gt;&lt;br /&gt;// Ямар нэгэн гэмтэл гарахыг эс тооцвол, харилцагч хоёрын аль нэг нь&lt;br /&gt;// сүвээ хаахад хоолой тасарч тухайн сүв дахин сул, чөлөөтэй болно.&lt;br /&gt;&lt;br /&gt;// Тооцоолуур дээр олон хөтөлбөр зэрэгцэн гүйдгийг санах хэрэгтэй.&lt;br /&gt;// Тиймээс сүлжээний хөтөлбөр бичихдээ ямар, ямар хөтөлбөр аль, аль&lt;br /&gt;// боомтыг ашигладаг талаар мэдэж байх хэрэгтэй.&lt;br /&gt;&lt;br /&gt;// Эхлээд хөтөлбөрийн явдлаа түр зогсоон сонсоё.&lt;br /&gt;// Шинээр хэрэглэгч холбогдмогц, үүссэн Сүвийг socket нэртэй&lt;br /&gt;// хувьсагч руу хадгалан цааш хөдлөе.&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Socket socket = server.accept();&lt;br /&gt;&lt;br /&gt;// Хөтөлбөр энд ирнэ гэдэг нь хэрэглэгч холбогджээ гэсэн үг.&lt;br /&gt;&lt;br /&gt;// Сүв нь ОрцУрсгуур ба ГарцУрсгуур гэсэн хоёр хэсэгтэй.&lt;br /&gt;// ОрцУрсгуур нь мэдээллийг зөвхөн хүлээн авч унших үүрэгтэй.&lt;br /&gt;// ГарцУрсгуур нь мэдээллийг зөвхөн бичиж илгээх үүрэгтэй.&lt;br /&gt;// Энэ хоёр нийлэхээрээ хоёр чиглэлтэй хоолой болно.&lt;br /&gt;&lt;br /&gt;// ГарцУрсгуур руу мэдээлэл бичсэн л бол тухайн мэдээллийг&lt;br /&gt;// буцаан авах боломжгүйгээр цааш урсган авч одно.&lt;br /&gt;// ОрцУрсгуураас мэдээлэл уншсан л бол тухайн мэдээлэл&lt;br /&gt;// дахин сэргэхгүйгээр урсгуураас сорогдон үгүй болно.&lt;br /&gt;&lt;br /&gt;// Үүссэн сүвийнхээ ОрцУрсгуурыг in хувьсагч руу хадгалъя.&lt;br /&gt;// Хэрэглэгчийн хүсэлтийг үүгээр дамжуулан уншина.&lt;br /&gt;InputStream in = socket.getInputStream();&lt;br /&gt;&lt;br /&gt;// Үүссэн сүвийнхээ ГарцУрсгуурыг out руу хадгалъя.&lt;br /&gt;// Хариугаа үүгээр дамжуулан хэрэглэгч рүү илгээнэ.&lt;br /&gt;OutputStream out = socket.getOutputStream();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// ОрцУрсгуураас унших нэг байт мэдээлэл түр хадгалах үүр.&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;int data = 0;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// Энэ бүл дотор 256 хүртэл байт мэдээлэл хадгалж болно.&lt;br /&gt;// Хэрэглэгчээс ирэх хүсэлт хэдэн ч мөрөөс бүрдэж болно.&lt;br /&gt;// Гэхдээ нэг мөр нь 256 ширхэг байтаас хэтрэхгүй гэж үзэв.&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;byte[] line = new byte[256]; //&lt;br /&gt;&lt;br /&gt;// мөрийн төгсгөлд 0d 0a гэсэн хоёр байт заавал олдох ёстой.&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;0d байтыг &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;CR, харин &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;0a байтыг &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;NL гэж тэмдэглэсэн байгаа.&lt;br /&gt;// Энэ хоёр байтаар мөр хаана эхэлж, хаана дуусч буйг мэднэ. &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;boolean CR = false; // return код мөн эсэх&lt;br /&gt;boolean NL = false; // new line код мөн эсэх&lt;br /&gt;&lt;br /&gt;// ОрцУрсгуураас мэдээлэл уншихдаа хэрэглэх тоолуур.&lt;br /&gt;int count = 0;&lt;br /&gt;&lt;br /&gt;// Энэ бүл дотор 10000 ширхэг байт хадгалж болно.&lt;br /&gt;// Тэгэхлээр нэлээд олон мөр багтаах чадалтай гэсэн үг.&lt;br /&gt;// Одоогоор бид үүнийг ашиглахгүй.&lt;br /&gt;byte[] buffer = new byte[BUFFER_SIZE];&lt;br /&gt;&lt;br /&gt;// хэрвээ ОрцУрсгуураас -1 гэсэн утга ирвэл орц хаагджээ,&lt;br /&gt;// цаашдаа мэдээлэл ирэхгүй гэсэн үг.&lt;br /&gt;// Энэ тохиолдолд, давталтаас гарч цааш явна.&lt;br /&gt;&lt;br /&gt;// -1 утга ирсний дараа орцоос унших үйлдэл хийж болохгүй.&lt;br /&gt;// Уншина гэдэг нь хүлээнэ гэсэн үг, харин хүлээнэ гэдэг нь&lt;br /&gt;// мэдээлэл иртэл байрнаасаа хөдлөхгүй зогсоно гэсэн үг.&lt;br /&gt;//&lt;br /&gt;// Хэрвээ энэ хөтөлбөрийн кодыг бүхэлд нь гүйлгэн харж&lt;br /&gt;// явдлыг нь шинжвэл дараахь байдалтай:&lt;br /&gt;&lt;br /&gt;// эхлэл&lt;br /&gt;//   1. сонсох&lt;br /&gt;//   2. хүсэлт тайлан унших&lt;br /&gt;//   3. хариу илгээх&lt;br /&gt;//   4. сүвээ хаах&lt;br /&gt;// төгсгөл&lt;br /&gt;&lt;br /&gt;// Нэг хүсэлт боловсруулахдаа дээрхи дөрвөн шатыг дамжиж байна.&lt;br /&gt;// Сүүлийн шатанд сүвээо хаасныхаа дараа дахиад эхний шатандаа&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;эргэн ирж &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;дараагийн хүсэлт ирэхийг хүлээнэ. Үйл явдал ийм&lt;br /&gt;// байдлаар тасралтгүй үргэлжлэн эргэлдэнэ.&lt;br /&gt;&lt;br /&gt;// Хүсэлтийг тайлан уншихдаа өөр нэг эргүүлэг үүсгэж байна.&lt;br /&gt;// Явдлыг нь тоймолбол:&lt;br /&gt;&lt;br /&gt;// эхлэл&lt;br /&gt;// 1. байт унших&lt;br /&gt;// 2. уншсан байтаа мөр рүү нэмэх&lt;br /&gt;// 3. төлөвөө өөрчлөх&lt;br /&gt;// төгсгөл&lt;br /&gt;&lt;br /&gt;// Хүсэлтийг тайлан уншихдаа энэ гурван шатыг дамжиж байж нэг&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;байт &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;уншина. Хэрэглэгчээс ирэх нэг хүсэлт хэдэн ч мөрнөөс&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;бүрдэж &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;болно. Бас мөр бүхэн ондоо. Тэгэхлээр хэдэн байт&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;унших вэ, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хэзээ эргүүлгээ зогсоож дараагийн шат руу шилжих&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;вэ &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;гэдэг &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;тодорхойгүй.&lt;br /&gt;&lt;br /&gt;// Энэ асуудлыг шийдэхийн тулд дотоод төлвийн хувьсагчдыг&lt;br /&gt;// ашигласан байна. Ямар ч байтыг уншихад мөрийн төгсгөл мөн,&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;мөрийн төгсгөл биш, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хоосон мөр гэсэн гурван төлвийн аль&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;нэгэнд з&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;аавал оршино.&lt;br /&gt;&lt;br /&gt;// Хэрвээ хоосон мөр байвал эргүүлгээс шууд гарна. Манай&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;эргүүлгийн &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;нэг онцлог бол төгсгөлдөө хүрээд эхлэлдээ заавал&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;буцаж ирдэг, &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;харин &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;дараа нь эргүүлгээс гарах эсэхээ шийднэ.&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Гэтэл эхлэл маань &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;унших &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;үйлдэл хийж байна.&lt;br /&gt;&lt;br /&gt;// Хоосон мөр тааралдахад эргүүлгийн төгсгөлөөс шууд таслан&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;гарснаар унших &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;үйлдлээс мултарч байна. Хоосон мөр гэдэг нь&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;дахиж мэдээлэл ирэхгүй &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;гэсэн үг. Мэдээлэл ирэх явцын дундуур &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;ямар&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; нэгэн гэмтлийн улмаас &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хэрэглэгчтэй тогтоосон хоолой &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;тасарч&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt; бас болно. Энэ тохиолдолд &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хэрэглэгчээс дахин&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;// мэдээлэл ирэхгүй.&lt;br /&gt;&lt;br /&gt;// Товчоор хэлэхэд, ОрцУрсгуураас / жишээ нь in.read() / унших&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;үйлдэл &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хийхдээ тун хянуур, болгоомжтой байх ёстой. Учир нь&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;энэ үйлдэл &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;нэг байт мэдээлэл ирэн иртэл хүлээгээд зогсдог.&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;Хэрэв нөгөө тал &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;мэдээлэл дамжуулахаа зогсоочихсон байхад нь&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;унших гэж оролдвол &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;тэр чигээрээ үүрд хүлээнэ гэсэн үг.&lt;br /&gt;&lt;br /&gt;// Ийм үед хөтөлбөрийг хүчээр унтраахгүй л бол цаашаа явахгүй.&lt;br /&gt;// Уул нь нэг хэрэглэгчийн хүсэлтийг хүлээн авч хариуг нь&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;явуулаад &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;дараагийн хүсэлтээ хүлээн авах ёстой. Гэтэл нэг&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;хэрэглэгч дээр &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;очоод зогсчих аваас дараагийн хэрэглэгчтэй&lt;br /&gt;// &lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;харьцаж чадахаа болино.&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;// Энэ мэт логикийг доороос харж болно.&lt;br /&gt;&lt;br /&gt;while ((data = in.read()) &amp;gt; -1) {&lt;br /&gt;&lt;br /&gt;line[count] = (byte)data; // уншсан байтаа мөр рүү хадгалъя&lt;br /&gt;count++;&lt;br /&gt;&lt;br /&gt;String hex = Integer.toHexString(data);&lt;br /&gt;hex = (hex.length()==1? &quot;0&quot;+hex: hex);&lt;br /&gt;&lt;br /&gt;// ямар байт ирснийг арванзургаатын кодоор нь харья&lt;br /&gt;System.out.print(hex + &quot; &quot;);&lt;br /&gt;&lt;br /&gt;switch (data) {&lt;br /&gt;case 13: CR = true; break;&lt;br /&gt;case 10: NL = (CR ? true: false); break;&lt;br /&gt;default: CR = false; NL = false; break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// шинэ мөр гэдэг нь дараах хоёр байт: 13 10;&lt;br /&gt;if ( CR &amp;&amp;amp;amp; NL ) {&lt;br /&gt;&lt;br /&gt;// хоосон мөр гэдэг нь толгойн хэсэг дууслаа&lt;br /&gt;// гэсэн үг.&lt;br /&gt;// хоосон мөр хоёрхон байтаас бүрдэнэ: 13 10&lt;br /&gt;if (count == 2) {&lt;br /&gt;break;&lt;br /&gt;} else {&lt;br /&gt;&lt;br /&gt;// мөр бүтээе&lt;br /&gt;byte[] temp = new byte[count];&lt;br /&gt;System.arraycopy(line,0,temp,0,count);&lt;br /&gt;&lt;br /&gt;// мөрөө бичвэр болгон харъя&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.print(new String(temp));&lt;br /&gt;System.out.println();&lt;br /&gt;&lt;br /&gt;// шинэ мөр&lt;br /&gt;count = 0;&lt;br /&gt;CR = false;&lt;br /&gt;NL = false;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// хэрэглэгчээс ирсэн хүсэлтийг тайлж уншиж дууслаа&lt;br /&gt;// хариугаа илгээе&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&quot;sending response ...&quot;);&lt;br /&gt;&lt;br /&gt;// эхлээд OK мэдээ илгээнэ&lt;br /&gt;out.write(OK.getBytes());&lt;br /&gt;&lt;br /&gt;// http header хэсгээ илгээе&lt;br /&gt;out.write(&quot;Content-Type: text/html&quot;.getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;out.write(&quot;Content-Length: &quot;.getBytes());&lt;br /&gt;out.write(Long.toString(length).getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;out.write(&quot;Date: &quot;.getBytes());&lt;br /&gt;out.write(new Date().toString().getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;out.write(&quot;Server: Simplest Web Server&quot;.getBytes());&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;// http header хэсгээ илгээж дууслаа&lt;br /&gt;// тиймээс, хоосон мөр илгээе&lt;br /&gt;out.write(NEWLINE.getBytes());&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// http body биеэ илгээе&lt;br /&gt;out.write(WelcomeMessage.getBytes());&lt;br /&gt;&lt;br /&gt;in.close();&lt;br /&gt;out.close();&lt;br /&gt;socket.close();&lt;br /&gt;&lt;br /&gt;} // main loop&lt;br /&gt;&lt;br /&gt;}  // main method&lt;br /&gt;&lt;br /&gt;} // SimplestServer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bold style=&quot;font-weight: bold;&quot;&gt;энэ хөтөлбөрийн гарц:&lt;/bold&gt;&lt;br /&gt;&lt;br /&gt;listening on 1010&lt;br /&gt;47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a&lt;br /&gt;GET / HTTP/1.1&lt;br /&gt;&lt;br /&gt;48 6f 73 74 3a 20 6c 6f 63 61 6c 68 6f 73 74 3a 31 30 31 30 0d 0a&lt;br /&gt;Host: localhost:1010&lt;br /&gt;&lt;br /&gt;55 73 65 72 2d 41 67 65 6e 74 3a 20 4d 6f 7a 69 6c 6c 61 2f 35 2e 30 20 28 57 69 6e 64 6f 77 73 3b 20 55 3b 20 57 69 6e 64 6f 77 73 20 4e 54 20 35 2e 31 3b 20 65 6e 2d 55 53 3b 20 72 76 3a 31 2e 38 2e 30 2e 38 29 20 47 65 63 6b 6f 2f 32 30 30 36 31 30 32 35 20 46 69 72 65 66 6f 78 2f 31 2e 35 2e 30 2e 38 0d 0a&lt;br /&gt;User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 3a 20 74 65 78 74 2f 78 6d 6c 2c 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 6d 6c 2c 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 68 74 6d 6c 2b 78 6d 6c 2c 74 65 78 74 2f 68 74 6d 6c 3b 71 3d 30 2e 39 2c 74 65 78 74 2f 70 6c 61 69 6e 3b 71 3d 30 2e 38 2c 69 6d 61 67 65 2f 70 6e 67 2c 2a 2f 2a 3b 71 3d 30 2e 35 0d 0a&lt;br /&gt;Accept: text/xml,application/xml,application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 2d 4c 61 6e 67 75 61 67 65 3a 20 65 6e 2d 75 73 2c 65 6e 3b 71 3d 30 2e 35 0d 0a&lt;br /&gt;Accept-Language: en-us,en;q=0.5&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e 67 3a 20 67 7a 69 70 2c 64 65 66 6c 61 74 65 0d 0a&lt;br /&gt;Accept-Encoding: gzip,deflate&lt;br /&gt;&lt;br /&gt;41 63 63 65 70 74 2d 43 68 61 72 73 65 74 3a 20 49 53 4f 2d 38 38 35 39 2d 31 2c 75 74 66 2d 38 3b 71 3d 30 2e 37 2c 2a 3b 71 3d 30 2e 37 0d 0a&lt;br /&gt;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;br /&gt;&lt;br /&gt;4b 65 65 70 2d 41 6c 69 76 65 3a 20 33 30 30 0d 0a&lt;br /&gt;Keep-Alive: 300&lt;br /&gt;&lt;br /&gt;43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 2d 61 6c 69 76 65 0d 0a&lt;br /&gt;Connection: keep-alive&lt;br /&gt;&lt;br /&gt;43 61 63 68 65 2d 43 6f 6e 74 72 6f 6c 3a 20 6d 61 78 2d 61 67 65 3d 30 0d 0a&lt;br /&gt;Cache-Control: max-age=0&lt;br /&gt;&lt;br /&gt;0d 0a&lt;br /&gt;sending response ...&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Энд, үйлчлэгч, үйлчлүүлэгч хоёрын хооронд явагдаж буй харилцан яриаг байт болон бичвэр гэсэн хоёр хэлбэрээр зэрэг харуулсан байна. Гэхдээ зөвхөн header буюу толгойн хэсэг.&lt;br /&gt;&lt;br /&gt;Хөтөлбөр маань сүвээр (сокет) дамжин хэрэглэгчээс (толилуур) ирж буй өгөгдлийг эхлээд байт мөр (line, дараа нь temp), дараа нь тэмдгийн хэлхээс / new String(temp) / болгон хувиргаж байна. Мөрийн төгсгөлийг 0d, 0a (ердийн 13, 10) гэсэн хоёр байтаар дүрсэлдгийг сануулъя.&lt;br /&gt;&lt;br /&gt;Хэрвээ тухайн мөр зөвхөн 0d, 0a  гэсэн хоёрхон байтаас бүрдэж байвал уг мөр нь хоосон мөр гэсэн үг. Энэ нь толгойн хэсэг дууслаа гэсэн үг.&lt;br /&gt;&lt;br /&gt;Одоохондоо хариу мэдээ маань WelcomeMessage хувьсагч доторхи тогтмол бичвэр байна. Үүнийг хэрхэн файлаас уншдаг болгон өөрчлөх вэ?&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/1600/simpleserver.2.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger2/7190/902169166764807/400/simpleserver.0.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://javahicheel.blogspot.com/feeds/5841638025801706990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/7390569814137306134/5841638025801706990' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/5841638025801706990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7390569814137306134/posts/default/5841638025801706990'/><link rel='alternate' type='text/html' href='http://javahicheel.blogspot.com/2006/11/1.html' title='Бичил вэб үйлчлэгч, нэгдүгээр хэсэг'/><author><name>erka</name><uri>http://www.blogger.com/profile/10477767353401981966</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>