Archive for category groovy

เขียน Client–Server เป็นไหม???

เขียน Client – Server เป็นไหม? คำถามหนึ่งประโยคออกมาจากปากผู้สัมภาษณ์ผม ทำให้นึกย้อนกลับไปว่าเคยเขียนบ้างไหม? ต้องเคยซิ … แล้วมันเขียนยังไงละ?

เราเริ่มกันที่การเขียน code ฝั่ง server ก่อนละกัน

Server แบบ Java Code

แบบแรกเขียนใช้ DataOutputStream , DataInputStream

package com.my.test.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
	private static int port = 4444;

	public static void main(String[] args) {
		ServerSocket server;
		try {
			server = new ServerSocket(port);
			Socket socketAccept;
			while (true) {
				socketAccept = server.accept();
				System.out.println("Accept from "
						+ socketAccept.getInetAddress().getHostName());
				DataOutputStream output = new DataOutputStream(socketAccept.getOutputStream());
				DataInputStream input = new DataInputStream(socketAccept.getInputStream());

				String str = input.readLine();
				System.out.println(str);
				output.writeBytes("Hi,I'm fine.\n");
				output.flush();
				System.out.println("response successfully.");
				output.close();
				socketAccept.close();
			}
		} catch (IOException e) {
			System.err.println(e.toString());
		}
	}
}

แบบที่สองขียนใช้ PrintStream, BufferedReader

package com.my.test.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
	private static int port = 4444;

	public static void main(String[] args) {
		ServerSocket server;
		try {
			server = new ServerSocket(port);
			Socket socketAccept;
			while (true) {
				socketAccept = server.accept();
				System.out.println("Accept from "
						+ socketAccept.getInetAddress().getHostName());

				PrintStream output = new PrintStream(socketAccept.getOutputStream());
				BufferedReader input = new BufferedReader(
						new InputStreamReader(socketAccept.getInputStream()));

				String str = input.readLine();
				System.out.println(str);
				output.print("Hi,I'm fine.\n");
				output.flush();
				System.out.println("response successfully.");
				output.close();
				socketAccept.close();
			}
		} catch (IOException e) {
			System.err.println(e.toString());
		}
	}
}

แล้ว Client ละ? ก็เขียนทำนองเดียวกันครับแบบนี้

package com.my.test.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {
	public static void main(String[] args) throws InterruptedException {
		try {
			Socket socket = new Socket("localhost", 4444);
			PrintWriter writer = new PrintWriter(socket.getOutputStream());
			writer.print("Hi,How are you?\n");
			writer.flush();

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));
			String s = null;
			while ((s = reader.readLine()) != null) {
				System.out.println(s);
			}
			socket.close();
		} catch (IOException e) {
			System.err.println(e.toString());
		}
	}

}

ลอง run โปรแกรมดูนะครับ run server ก่อนแล้วค่อย run client

ที่นี่มาดู code แบบ groovy บ้าง

Server แบบ groovy

package com.my.socket

import java.net.ServerSocket

def server = new ServerSocket(4444)

while(true) {
	server.accept { socket ->
		println "processing new connection..."
		socket.withStreams { input, output ->
			def reader = input.newReader()
			def buffer = reader.readLine()
			println "server received: $buffer"
			now = new Date()
			output << "echo-response($now): Hi,I'm fine.\n"
		}
		println "processing/thread complete."
	}
}

Client แบบ groovy

package com.my.socket

s = new Socket("localhost", 4444);
s.withStreams { input, output ->
  output << "Hi,How are you?\n"
  buffer = input.newReader().readLine()
  println "response = $buffer"
}

เขียนสั้นกว่า java แต่ผลการทำงานเหมือน ๆ กันเลย >_<” สั้นเกิ๊น

, ,

ให้ความเห็น

XML with Python : ตอนที่ 1 อ่าน XML เทียบกับ Groovy

วิธีอ่านด้วย Java ลองดูได้ที่ post เก่า ที่นี่นะครับ

วิธีอ่านด้วย Groovy

package com.my.test.xml

def xml = """
 <author>
      <name>boysbee (boysbee)</name>
      <uri>http://twitter.com/boysbee</uri>
 </author>
"""

def author = new XmlParser().parseText(xml)
author.each{
	println "tag name : " + it.name()+ " = " +it.text()
}

ลองดู Python บ้าง

from xml.dom import minidom

xml = "<author><name>boysbee (boysbee)</name><uri>http://twitter.com/boysbee</uri></author>"
xmldoc = minidom.parseString(xml)
print xmldoc.toxml()

สั้นและง่ายพอ ๆ กันเลย … ^ ^”

, ,

ให้ความเห็น

XML with Python : ตอนที่ 2 แล้วสร้างเอกสาร XML เทียบกับ Groovy ดูละกัน

ดู code java ที่ post เก่าได้นะครับจะได้เปรียบเทียบกันได้ ที่นี่

วิธีสร้างด้วย Groovy

package com.my.xml

def sw = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(sw)
xml.author(){
	name("boysbee (boysbee)")
	uri("http://twitter.com/boysbee")
}
print sw

สร้างด้วย python

from xml.dom.minidom import Document

doc = Document()

author = doc.createElement("author")
name = doc.createElement("name")
uri = doc.createElement("uri")

nameText = doc.createTextNode("boysbee (boysbee)")
name.appendChild(nameText)

uriText = doc.createTextNode("http://twitter/boysbee")
uri.appendChild(uriText)

author.appendChild(name)
author.appendChild(uri)

doc.appendChild(author)

print doc.toprettyxml(indent=" ")

python ยาวกว่านิดหน่อย ^ ^”

, ,

2 ความเห็น

XML with Groovy : ตอนที่ 2 แล้วสร้างเอกสาร XML ยังไงละ???

วิธีสร้างด้วย Java

package com.my.test.xml;

import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

public class TestCreateXml {
	public static void main(String[] args) {
	    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	    try {
	    	// crate document builder
	      DocumentBuilder db = dbf.newDocumentBuilder();
	      // create new document
	      Document doc = db.newDocument();
	      // create root element 'author'
	      Element author = doc.createElement("author");
	      doc.appendChild(author);
	      // create element 'name'
	      Element name = doc.createElement("name");
	      // add text value
	      Text text1 = doc.createTextNode("boysbee (boysbee)");
	      name.appendChild(text1);
	      // append to parent
	      author.appendChild(name);
	      // create element 'uri'
	      Element uri = doc.createElement("uri");
	      // add text value
	      Text text2 = doc.createTextNode("http://twitter.com/boysbee");
	      uri.appendChild(text2);
	      // append to parent
	      author.appendChild(uri);

	      // Output the XML
	      TransformerFactory tf = TransformerFactory.newInstance();
	      Transformer transformer = tf.newTransformer();
	      transformer.setOutputProperty(OutputKeys.INDENT, "yes");
	      StringWriter sw = new StringWriter();
	      StreamResult sr = new StreamResult(sw);
	      DOMSource source = new DOMSource(doc);
	      transformer.transform(source, sr);
	      String xmlString = sw.toString();
	      System.out.println(xmlString);
	    }catch(ParserConfigurationException pce) {
	      pce.printStackTrace();
	    } catch (TransformerConfigurationException e) {
	      e.printStackTrace();
	    } catch (TransformerException e) {
	      e.printStackTrace();
	    }
	  }
}


วิธีสร้างด้วย Groovy

package com.my.xml

def sw = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(sw)
xml.author(){
	name("boysbee (boysbee)")
	uri("http://twitter.com/boysbee")
}
print sw

สั้น ๆ อีกละ ^ ^”

, ,

ให้ความเห็น

XML with Groovy : ตอนที่ 1 อ่าน XML ยังไงเนี่ย???

วิธีอ่านด้วย Java

package com.my.test.xml;

import org.xml.sax.SAXException;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;

public class TestReadXmlFromString {
	public static void main(String[] args) {
		String xml = "<author>" +
				"<name>boysbee (boysbee)</name>" +
				"<uri>http://twitter.com/boysbee</uri>" +
				"</author>";

		byte[] xmlBytes = xml.getBytes();
		InputStream is = new ByteArrayInputStream(xmlBytes);

		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document doc = db.parse(is);
			// get root element
			Element author = doc.getDocumentElement();
			// get all child element
			NodeList list = author.getChildNodes();
			for (int i = 0; i < list.getLength(); i++) {
				Element node = (Element) list.item(i);
				System.out.println("tag name : " + node.getTagName() + " = " + node.getTextContent());
			}
		} catch (ParserConfigurationException pce) {
			pce.printStackTrace();
		} catch (SAXException se) {
			se.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}
}

วิธีอ่านด้วย Groovy

package com.my.test.xml

def xml = """
 <author>
      <name>boysbee (boysbee)</name>
      <uri>http://twitter.com/boysbee</uri>
 </author>
"""

def author = new XmlParser().parseText(xml)
author.each{
	println "tag name : " + it.name()+ " = " +it.text()
}

สั้นและง่ายเกิน… ^ ^”

, ,

ให้ความเห็น

Install Groovy

Install

download ตัวติดตั้งจากที่นี่ก่อน download groovy ตัว 1.6 support JDK 1,4 , 1.7 support JDK 1.5 ขึ้นไปนะครับ ตัว install นั้นมีสองแบบ zip กับ window-installer แล้วแต่ถนัด ถ้าเลือกแบบ window-installer ก็ click , click ก็จบ แต่ถ้าเลือกแบบ zip นั้นต้องมาระเบิดแล้วเอาไปวางที่หลัง

Set Environment

  • เปิด System control panel
  • Click Advanced tab
  • Click ปุ่ม Environment Variables
  • เพิ่ม System variable ชื่อ “GROOVY_HOME” ใส่ค่าตรงช่อง value ด้วย directory ที่เราเอา groovy ไปลงไว้ เช่น( C:\groovy-1.7.5)
  • เพิ่ม add %GROOVY_HOME%\bin ที่ System variable “path”

    ทดสอบ

    ไปที่ start > run > cmd แล้วลองพิมพ์ groovy –v ดูครับ

  • ,

    ให้ความเห็น

    Follow

    Get every new post delivered to your Inbox.

    Join 82 other followers