●자바JSON

- 자바에서 JSON을 만들고 파싱을 해주는 기본 클래스가 없기때문에 라이브러리를 추가해줘야 한다.


- 자바 JSON라이브러리는 여러가지가 있다. 아래 예제는 org.json 라이브러리를 사용했다.

http://mvnrepository.com/artifact/org.json/json






●예제

- text.jsp

<%@page import="org.json.JSONException"%>

<%@page import="org.json.JSONObject"%>

<%@page import="org.json.JSONArray"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%


//JSON만들기

JSONObject jobj = new JSONObject();

try {

jobj.put("이름", "호랑이");

 jobj.put("나이", "10");

 jobj.put("직업", "동물");

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

JSONArray maglist = new JSONArray();

maglist.put(jobj);

maglist.put(jobj);

maglist.put(jobj);


JSONObject jobj2 = new JSONObject();

try {

jobj2.put("arr",maglist);

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}


System.out.println("jobj:"+jobj);

System.out.println("maglist:"+maglist);

System.out.println("jobj2:"+jobj2);


//JSON 해석하기

JSONObject obj;

try {

obj = new JSONObject(jobj2.toString());


JSONArray array = obj.getJSONArray("arr");

JSONObject dataObj = array.getJSONObject(0);


String friendName = dataObj.getString("이름");

String friendAge = dataObj.getString("나이");

System.out.println("friendName:"+friendName);

System.out.println("friendAge:"+friendAge);

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

%>

 




Posted by -현's-

댓글을 달아 주세요


●자바로 오늘이 무슨 요일인지 구하기


   String[] weekDay = { "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일" };     

   Calendar cal = Calendar.getInstance(); 

      int num = cal.get(Calendar.DAY_OF_WEEK)-1; 

      String today = weekDay[num]; 

      System.out.println(num); 

      System.out.println("오늘의 요일 : " + today ); 



Posted by -현's-

댓글을 달아 주세요



●File 클래스

- 파일과 관련된 정보를 나타내고 제어하는데 주로 사용된다. 파일에 관한 정보를 설정하고 속정을 바꾸는 기능 등을 한다.




- FileEx.java

import java.io.File;


class FileEx

{

public static void main(String[] args){

File f1 = new File("aa.txt");


System.out.println("f1.getPath():"+f1.getPath());

System.out.println("f1.getAbsolutePath():"+f1.getAbsolutePath());

System.out.println("f1.getName():"+f1.getName());

System.out.println("f1.toString():"+f1.toString());


try{

System.out.println("f1.toURL():"+f1.toURL());

}catch(java.net.MalformedURLException e){

System.out.println("f1.toURL():"+e);

}

System.out.println("f1.canRead():"+f1.canRead());

System.out.println("f1.canWrite():"+f1.canWrite());

System.out.println("f1.isAbsolute():"+f1.isAbsolute());

System.out.println("f1.isDirectory():"+f1.isDirectory());

System.out.println("f1.isFile():"+f1.isFile());

System.out.println("f1.isHidden():"+f1.isHidden());

System.out.println("f1.lastModified():"+f1.lastModified());

System.out.println("f1.length():"+f1.length());

System.out.println("f1.exists():"+f1.exists());

}

} 








Posted by -현's-

댓글을 달아 주세요


●문자 스트림(Character Stream)

- 자바 스트림 클래스 중에서 처리할 데이터가 문자인 경우에 사용한다. 문자 스트림은 16bit 유니코드 문자를 주고 받는다. 


Reader

Writer 

 입출력을 위한 문자 스트림의 최상위 추상 클래스

FileReader

FileWriter 

 파일 입출력을 위한 문자 스트림 클래스

BufferedReader

BufferedWriter 

 입출력 스트림에 버퍼링 기능을 추가해주는 스트림

PrintWriter 

 출력을 위한 동작을 지원하는 문자 스트림

InputStreamReader

OutputStreamWriter

 바이트와 문자 변환을 위한 입출력 스트림







●FileReader, FileWriter 클래스

- 기본 문자 인코딩 방식으로 텍스트 파일을 읽고 쓰기 위해 제공되는 문자 스트림 클래스이다.


-FileReaderWriter

import java.io.*;


public class FileReaderWriter

{

public static void main(String args[]){

try{

FileReader input = new FileReader("a.txt");

FileWriter output = new FileWriter("b.txt");

int a;

while((a=input.read()) != -1){

output.write(a);

}

input.close();

output.close();


}catch(IOException e){

e.printStackTrace();

}

}

} 












●BufferedReader, BufferedWriter 클래스

- 연결된 스트림에 버퍼링 기능을 한다.



BufferedReaderWriter.java

import java.io.*;


public class BufferedReaderWriter

{

public static void main(String []args){

try{

if(args.length<1){

System.out.println("xx");

}

String str;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("str.txt")));


while((str = br.readLine())!=null){

bw.write(str+"\n");

}

br.close();

bw.close();

}catch(IOException e){

e.printStackTrace();

}

}

} 













●InputStreamReader, OutputStreamWriter 클래스

- 바이트와 문자의 변환을 담당하는 클래스이다.




- IOReader.java

import java.io.*;


public class IOReader

{

public static String getString(){

StringBuffer s = new StringBuffer();

Reader reader = new InputStreamReader(System.in);

char ch;

try{

while((ch = (char)reader.read())!= '\n'){

s.append(ch);

}

}catch(Exception e){

s = new StringBuffer("");

}

return s.toString().trim();

}

public static int getInt(){

String s = getString();

int n;

try{

n = Integer.parseInt(s);

}catch(Exception e){

n = 0;

System.out.println("숫자 에러");

}

return n;


}

public static void main(String[] args){

String name;

int age;

IOReader reader = new IOReader();

System.out.println("이름:");

name = reader.getString();

System.out.println("나이:");

age = reader.getInt();


System.out.println("이름:"+name+" 나이:"+age);


}


}












Posted by -현's-

댓글을 달아 주세요


●스트림

- 스트림은 하드웨어 장치로부터 데이터를 읽거나 기록할 때 사용하는 중간 매개체 역할을 하는 것이다. 자바에서 입출력은 스트림(stream)을 통해 이루어진다. 자바에서는 java.io 패키지에서 입출력에 관한 기능들을 제공한다.


- 스트림을 기능에 따라 분류하면 스트림의 기본적인 기능을 담당하는 노드 스트림과 노드 스트림이나 다른 필터 스트림에 붙어서 더 효율적이도록 기능을 확장 시켜주는 필터 스트림으로 분류할 수 있다. 노드 스트림에는 FileInputStream, FileOutputStream 클래스가 있고, 필터 스트림에는 BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputstream 클래스 등이 있다.


- 스트림을 데이터 종류에 따라 분류하면 바이트 스트림과 문자 스트림으로 분류할 수 있다. 바이트 스트림은 데이터가 8비트 단위로 전송되어 입출력을 지원하는 스트림으로 파일입출력, 객체의 입출력, 기본 자료형의 입출력 등에 사용된다. 문자 스트림은 문자 전송을 위한 스트림으로 2바이트 단위로 전송된다.


- 바이트 스트림의 계층도













- 문자 스트림 계층도















Posted by -현's-

댓글을 달아 주세요


●UDP 소켓

- TCP 소켓은 서로 연결된 상태에서의 통신 방법이다. 이 방법은 높은 신뢰성이 요구된느 응용 프로그램에 적합하지만 높은 신뢰성이 요구되지 않거나 적은 양의 데이터를 전송할 때는 네트워크에 부담을 많이 주기 때문에 적합하지 않다. 그래서 이때는 UDP소켓을 쓰는 것이 좋다.


- UDP는 TCP소켓에 비해 신뢰성과 안정성은 부족하지만 연결을 설정하지 않으므로 네트워크에 부담을 주지 않는다.


- 자바에서는 DatagramPacket, DatagramSocket 클래스를 사용한다.


DatagramPacket 클래스는 데이터그램을 사용할 수 있게 한다.


- 데이터그램 패켓은 비연결 패킷 전송 서비스를 구현하기 위해 사용한다.


DatagramSocket 클래스는 데이터그램 패킷을 보내거나 받기 위한 데이터그램 소켓 기능을 제공해준다.








●ex

- UDPServer.java


import java.net.*;

import java.io.*;


public class UDPServer

{

public final static int discardPort = 3000;

static byte[] buffer = new byte[65507];


public static void main(String[] args){

int port;

try{

port=Integer.parseInt(args[0]);

}catch(Exception e){

port=discardPort;

}


try{

DatagramSocket ds = new DatagramSocket(port);

DatagramPacket dp = new DatagramPacket(buffer, buffer.length);

while(true){

try{

ds.receive(dp);

String s = new String(dp.getData(), 0, 0, dp.getLength());

System.out.println(dp.getAddress()+" at port"+dp.getPort()+" says"+s);

}catch(IOException e){

System.err.println(e);

}

}

}catch(SocketException se){

System.out.println("22");

System.err.println(se);

}

}

}





- UDPClient.java


import java.net.*;

import java.io.*;


public class UDPClient

{

public final static int port = 3000;

public static void main(String[] args){

String hostname;

if(args.length>0){

hostname=args[0];

}else{

hostname="localhost";

}


try{

String strInput;

DatagramPacket outPacket;


InetAddress server = InetAddress.getByName(hostname);


BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));


DatagramSocket dSock = new DatagramSocket();


while(true){

strInput = userInput.readLine();


if(strInput.equals("quit"))break;


byte[] data = strInput.getBytes();


outPacket = new DatagramPacket(data, data.length, server, port);


UDPClient.viewInfo(outPacket);


dSock.send(outPacket);

}


}catch(UnknownHostException e){

System.err.println(e);

}catch(SocketException se){

System.err.println(se);

}catch(IOException e){

System.err.println(e);

}

}


public static void viewInfo(DatagramPacket packet){

System.out.println("패킷의 대상 주소:"+packet.getAddress().toString());

System.out.println("패킷의 대상 포트:"+packet.getPort());

System.out.println("패킷의 데이터 크기:"+packet.getLength());

}

}


 



























Posted by -현's-

댓글을 달아 주세요


●소켓

- 네트워크에 연결된 각 컴퓨터간에 데이터를 주고 받을 때 사용하는 도구이다.


- 소켓은 하드웨어 장비가 아닌 소프트웨어 차원의 개발 도구이다.





서버 소켓

- 서버 소켓은 클라이언트 소켓으로부터 접속 요청을 기다리고, 접속 요구가 있으면 클라이언트와 통신할 서버 측의 소켓을 생성한다.


- 자바에서는 ServerSocket 클래스가 서버 소켓을 위한 기능을 제공한다.








●클라이언트 소켓

- 서버 소켓의 IP주소와 포트 번호를 필요로한다.


- 클라이언트에서 소켓 객체를 만들면, 소켓은 바로 주어진 IP주소와 포트 번호로 서버에 연결을 시도하고 서버소켓은 다른 소켓을 만들어 클라이언트 소켓과 연결한다.


- 자바에서는 Socket 클래스를 이용한다.










●ex

- 서버에서 클라이언트에 현재 시간을 전송하는 예제


- ServerSocketTest.java (서버 소켓)

import java.io.*;

import java.net.*;

import java.util.Date;


public class ServerSocketTest

{

public final static int daytimeport=13;

public static void main(String args[]){

ServerSocket theServer;

Socket theSocket = null;

BufferedWriter writer;

try{

theServer = new ServerSocket(daytimeport);

System.out.println("서버 시작");

while(true){

try{

theSocket = theServer.accept();

OutputStream os = theSocket.getOutputStream();

writer = new BufferedWriter(new OutputStreamWriter(os));

Date now = new Date();

writer.write(now.toString()+"\r\n");

writer.flush();

}catch(IOException e){

System.out.println(e);

}finally{

try{

if(theSocket !=null ) theSocket.close();

}catch(IOException e){

System.out.println(e);

}

}

}

}catch(IOException e){

System.out.println(e);

}

}

}


 




- ClientSocketTest.java (클라이언트 소켓)

import java.io.*;

import java.net.*;


public class ClientSocketTest

{

public static void main(String args[]){

Socket theSocket;

String host;

InputStream is;

BufferedReader reader;

if(args.length>0){

host = args[0];

}else{

host="localhost";

}


try{

theSocket = new Socket(host, 13);

is = theSocket.getInputStream();

reader = new BufferedReader(new InputStreamReader(is));

String theTime = reader.readLine();

System.out.println("서버의 시간은:"+theTime);

}catch(UnknownHostException e){

System.out.println(args[0]+"호스트를 찾을 수 없음");

}catch(IOException e){

System.err.println(e);

System.out.println("a");

}




}




} 













Posted by -현's-

댓글을 달아 주세요


●URLEncoder 클래스

- 운영체제마다 일부 문자를 인식하는 방법이 다르기 때문에 이를 해결하기 위해 사용하는 클래스이다.


- URLEncoder 클래스는 데이터를 웹서버에서 요구하는 데이터 형식으로 바꾸는 기능을 한다. 


-위에서 웹서버가 요구하는 형식은 'x-www-form-urlencoded'라고 불리는 MIME 형식을 말한다.


-MIME 형식 변환 규칙

1. 아스키 문자(a~z, A~Z, 0~9), '.', '-', '_' 등은 그대로 전달된다.

2. 공백은 '+'로 전달된다.

3. 기타문자는 %ㅁㅁ 와 같이 전달된다. 이때 %ㅁㅁ는 아스키코드를 16진수화한 결과를 나타낸 것이다.









●URLDecoder 클래스

- URLEncoder클래스와 반대의 기능을 하는 클래스로, 'x-www-form-urlencoded' 형식의 MIME형식을 일반 문다열로 변환한다.



- ex

import java.net.*;

import java.io.*;


public class URLClass

{

public static void main(String[] args) throws UnsupportedEncodingException{

String strEncoding = URLEncoder.encode("abc 대한민국 ! @ # $ % 123 쀍", "utf-8");


String strDecoding = URLDecoder.decode(strEncoding, "utf-8");


System.out.println("인코딩된 문자열:"+strEncoding);

System.out.println("디코딩된 문자열:"+strDecoding);

}

} 












●URLConnection 클래스

- URL과 비슷한 기능을 가지지만 URL클래스는 단순 접속을 하는데 반해, URLConnection클래스는 UTL을 이용하여 참조된 자원에 대해 읽고 쓰는 작업을 할 수 있다.


- 어플리케이션과 URL간의 통신 링크를 작업을 하며, URL에 데이터 쓰기를 가능하게 해준다. 예를 들어 클라이언트가 서버에 보내는 서비스 요청이나 http로 폼 데이터를 post방식으로 보내는 역할을 한다.


- URLConnection 클래스 객체생성과 URL연결 위한 단계


1. URL에 대한 openConnection 메소드를 호출해서 URLConnection 클래스 객체를 생성한다.

ex) URL url = new URL("http://naver.com");

     URLConnection connection = url.openConnection();


2. connect 메서드에 의해 연결이 이루어진다.

ex) connection = url.openConnection();


3. 셋업 파라미터와 일반 요청 프로퍼티를 이용하여 연결한다.


4. 연결이 되면 객체는 이용 가능하게 되고, 객체의 헤더 항목과 내용을 읽을 수 있다.

 



- ex

import java.net.*;

import java.io.*;


public class URLConnectionTest

{

public static void main(String[] args){

try{

URL url = new URL("http://main.nateimg.co.kr/img/cms/content_pool/2014/01/140129_nate_BI(0).png");

URLConnection conn = url.openConnection();

System.out.println("문서의 타입:"+conn.getContentType());


}catch(Exception e){

//e.printStacktrace();

}

}

}

 









Posted by -현's-

댓글을 달아 주세요


●InetAddress 클래스

- 자바에서 IP 주소를 표현할때 사용하는 클래스이다. 


- InetAddress의 주요 메서드

  ->getAddress() - InetAddress 객체의 IP주소를 반환

  ->getHostAddress() - IP주소를 반환

  ->getHostName() - 호스트 이름을 문자열로 반환 



- ex

import java.net.*;


class ex1

{

public static void main(String args[]) throws UnknownHostException{

InetAddress address = InetAddress.getLocalHost();

System.out.println("로컬컴퓨터 이름:"+address.getHostName());

System.out.println("로컬컴퓨터 IP주소:"+address.getHostAddress());

address = InetAddress.getByName("www.naver.com");

System.out.println("www.naver.com 의 이름과 IP주소:"+address);


InetAddress sw[] = InetAddress.getAllByName("www.naver.com");


for(int i=0;i<sw.length; i++){

System.out.println(sw[i]);

}


}

} 






- ex2

import java.net.*;


class ex2

{

public static void main(String args[]){

InetAddress ipAddress=null;


try{

ipAddress = InetAddress.getByName("202.131.30.11");

System.out.println("getHostName:"+ipAddress.getHostName());

System.out.println("getHostAddr:"+ipAddress.getHostAddress());

System.out.println("toString:"+ipAddress.toString());

}catch(UnknownHostException e){

System.out.println(e);

}

System.out.println("----------------------------");

try{

ipAddress = InetAddress.getByName("www.naver.com");

System.out.println("getHostName:"+ipAddress.getHostName());

System.out.println("getHostAddr:"+ipAddress.getHostAddress());

System.out.println("toString:"+ipAddress.toString());

}catch(UnknownHostException e){

System.out.println(e);

}

}

}










Posted by -현's-

댓글을 달아 주세요


●IP

- 인터넷상에서 하나의 컴퓨터를 구분하기 위한 고유번호이다.


- 234.212.324.212 처럼 4개의 숫자로 구성되고 각 숫자는 0~255까지 256개의 숫자를 나타낼 수 있다. 이 중 0은 네트워크 주소로, 255는 브로드캐스트 주소로 사용이 예약되어 있다.


- 현재 32비트의 IPv4는 포화 상태라 128비트의 IPv6으로 대체되고 있다




●도메인 이름

- 숫자로 된 IP주소는 기억하기도 힘들고 입력하기도 힘들어서 불편하다. 그래서 IP에 대응 하는 문자로 된 주소를 사용하는데 이를 도메인이라 한다.


- 예를 들어 네이버의 IP주소는 'http://202.131.30.12/'  이고 도메인 주소는 'www.naver.com' 이다.




●DNS(Domain Name System)

- 도메인 이름은 사용자가 편하게 IP주소를 사용하도록 하기 위해 만들어진 것고, 실제 인터넷에 연결된 컴퓨터를 구분하는데는 IP주소가 쓰인다. 따라서 사용자가 사용하는 도메인 이름을 자동으로 IP주소로 바꿔줘야 하는데 이러한 작업을 하는 것이 DNS이다.





●URL(Uniform Resource Locator) 형식

- 인터넷상의 각종 정보가 있는 위치를 표시하는 형식이다.


- '서비스명://도메인이름/경로' 이런 형식으로 이루저진다.


- 서비스명은 접속할 컴퓨터에 있는 자료의 사용방법을 지정하는 것으로 웹서비스를 이용할땐 http://, 파일송수신은 ftp://, 뉴스그룹은 news:, 텔넷은 telnet://, 전자우편은 mailto: 를 사용한다.






●서브넷 마스크

- IP주소를 효율적으로 사용하기 위해 한개의 IP주소에 여러개의 네트워크 주소로 나누어 할당하는 기법이다. 





●포트

- 하드웨어가 아닌 소프트웨어적으로 접속이 가능한 연결 단자이다. 물리적인 통신선은 하나지만 포트를 이용하면 여러가지 서비스를 동시에 수행할 수 있다.


- 하나의 컴퓨터가 http나 ftp등의 여러 서버를 제공할때 포트를 정해서 제공한다.


- 포트는 0~65535 사이의 번호를 가진다. http는 보통 80포트를 사용하고 ftp는 21번 포트를 사용한다. 보통 0~1024는 주로 시스템에서 사용하기때문에 1025이상의 포트를 사용하는게 좋다.





●TCP/IP

- IP : 인터넷은 IP라는 프로토콜을 사용한다. IP는 4개의 숫자로 이루어진 IP주소를 사용한다.


- TCP : 보통 IP와 함께 사용하는 프로토콜이다. 


- TCP는 데이터나 파일을 패킷으로 나누거나 재조립하는 역할을 하고 IP는 이 패킷을 전달하거나 받는 역할을 한다.







Posted by -현's-

댓글을 달아 주세요