티거의 개발 공간

이클립스를 사용하면서 다른 프로젝트를 불러오거나

맥이나 리눅스에서 코딩하던것을 윈도우로 가져올때 가끔 한글이 완전히 깨져서 나오는 경우가 있다.

 

이 때는 인코딩이 맞지 않아서 생기는데
이클립스를 처음 설치했을 때 윈도우의 기본인코딩은 'MS949' 인코딩을 사용한다.
하지만 맥이나 리눅스 계열에서 이클립스를 처음 설치하면 기본인코딩은 'UTF-8' 인코딩을 사용한다.

프로젝트에 열기에 알맞은 인코딩을 선택해 열어야한다.
하지만 대부분은 UTF-8을 사용하고 오류가 별로 없기에 UTF-8 사용을 권장한다.

아래의 작업을 진행하기 전, 코딩 중인 파일을 저장하지 않고 인코딩을 바꿀 시 저장에러가 나올 수 있다. 다 저장 후 닫고 아래의 작업을 진행하자.


 

 

이클립스 상단 바에 Window 를 클릭하면 Preferences 가 있다.

 

 

클릭하면 환경설정창이 나오게 되는데, 왼쪽 카테고리에서 General - Workspace 를 클릭해준다.
그럼 위와 같은 설정화면이 나오는데 설정창 왼쪽 하단 'Text file encoding' 에 있는 것중에
Other 체크 후 콤보박스를 내려 UTF-8로 설정해준다.

그리고 OK나 Apply 를 눌러주면 적용이 된다.

 


 

 

위의 작업을 마치면 .java 파일을 이클립스로 열 때 기본인코딩 UTF-8로 열려지는데
기존에 MS949로 코딩했던 파일이 있다면 프로젝트나 파일별로 기본인코딩을 설정할 수 있다.
 

 

프로젝트 파일 오른쪽 클릭 후 하단에 Properties 클릭

 

 

그리고 왼쪽 카테고리에 Resource 를 클릭하고 'Text file encoding' 에서 Other 체크 후에 콤보박스를 내려 UTF-8 을 선택해준 후 OK 또는 Apply 를 누르면된다.

콤보박스에 MS949 항목이 없는데 MS949로 설정하고 싶다면 콤보박스를 내리지 말고 직접 MS949를 입력해 수정하면 된다.

자바 소켓통신 하는 코드는 아래와 같다.

 


 

[ Server.java ]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.net.*;
import java.util.*;
import java.io.*;
 
class Server
{
 
    private static int port = 0;
 
    public static void main(String[] args) 
    {
        System.out.println("SERVER PROGRAM");
        Scanner scan = new Scanner(System.in);
        while(true){
            System.out.print("[SYSTEM] Type Port : ");
            String ports = scan.nextLine();
            try{
                port = Integer.parseInt(ports);
                if(port <= 0 || port > 9999){
                    System.out.println("[SYSTEM] Wrong Port!");
                    port = 0;
                } else break;
            } catch(Exception e){ System.out.println("[SYSTEM] Wrong Port!"); }
        }
        openServer();
    }
 
    private static void openServer(){
        try{
            ServerSocket server = new ServerSocket(port);
            System.out.println("[SYSTEM] Server Started ["+port+"]");
            System.out.println("[SYSTEM] Wait Client...");
            Socket socket = server.accept();
            System.out.println("[SYSTEM] Connect! ["+socket.getInetAddress()+"]");
        
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            OutputStream os = socket.getOutputStream();
            DataOutputStream dou = new DataOutputStream(os);
 
            while(true){
                String msg = dis.readUTF();
 
                if(msg.equalsIgnoreCase("exit")){
                    dou.writeUTF("exit");
                    System.out.println("[SYSTEM] Shutdown Server");
                    socket.close();
                    server.close();
                    break;
                } else {
                    System.out.println("[CLIENT] " + msg);
                    dou.writeUTF("Data Received : " + msg);
                }
            }
        } catch(Exception e){
            System.out.println("[SYSTEM] Failed to open server");
        }
    }
 
}
 
 
cs

 

 


 

 

 

[ Client.java ]

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.io.*;
import java.net.*;
import java.util.*;
 
class Client 
{
 
    private static int port  = 0;
    private static String ip = "";
 
    public static void main(String[] args) 
    {
        System.out.println("CLIENT PROGRAM");
        Scanner scan = new Scanner(System.in);
        System.out.print("[SYSTEM] Type Ip: ");
        ip = scan.nextLine();
        while(true){
            System.out.print("[SYSTEM] Type Port : ");
            String ports = scan.nextLine();
            try{
                port = Integer.parseInt(ports);
                if(port <= 0 || port > 9999){
                    System.out.println("[SYSTEM] Wrong Port!");
                    port = 0;
                } else break;
            } catch(Exception e){ System.out.println("[SYSTEM] Wrong Port!"); }
        }
        
        Connect();
    }
 
 
    private static void Connect(){
        try{
            Socket socket = new Socket(ip, port);
            System.out.println("[SYSTEM] Server Connected ["+port+"]");
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
 
            Scanner scan = new Scanner(System.in);
            while(true){
                System.out.print("[SYSTEM] Type Message : ");
                String msg = scan.nextLine();
                
                OutputStream os = socket.getOutputStream();
                DataOutputStream dos = new DataOutputStream(os);
                dos.writeUTF(msg);
 
                String remsg = dis.readUTF();
    
                if(remsg.equalsIgnoreCase("exit")){
                    System.out.println("[SYSTEM] Shutdown Client");
                    socket.close();
                    break;
                } else
                System.out.println("[SERVER] " + remsg);
            }
 
        } catch(Exception e){
            System.out.println("[SYSTEM] You can not access the server");
        }
    }
}
 
 
cs

 

 


 

서버와 클라이언트 두개의 클래스가 있으며

서버 클래스를 먼저 실행시켜준 뒤 서버를 개방할 포트 입력 후

클라이언트 클래스를 실행시켜 접속할 아이피, 포트 입력하면

접속되어 소켓통신이 가능하다.

 

그리고 접속 포트와 서버 포트는 1~9999번으로 제한했지만,

실제로는 1~65565번까지 사용가능하다는거 같다.

자신의 공인아이피를 보여줄 사이트인 http://ipip.kr 이다.

웹 구조가 가장 간단하게 잘 나와있어 파싱하기 쉽다.


------------코드


public static void main(String[] a){

                

String IP = null;


try{

                        //파싱 할 사이트를 URL로 선언한다.

URL u = new URL("http://ipip.kr");

                        InputStreamReader input = new InputStreamReader(u.openStream());

BufferedReader br = new BufferedReader(input);


String Line;


while((Line=br.readLine())!=null) System.out.println(Line);


} catch(Exception e){ e.printStackTrace(); }

    }


--------------결과



<head>

<title>Your IP is (자신의아이피)</title>

</head>

<html>


<head>

<meta http-equiv="content-type" content="text/html; charset=euc-kr">

<title>++ ipip.kr ++</title>

<meta name="generator" content="Namo WebEditor v5.0">

</head>


<body bgcolor="#BBFFFF" text="black" link="blue" vlink="purple" alink="red">

<br><br><br><br>

<table align="center" cellpadding="0" cellspacing="0">

 (===========중략============)

</table>

<p align="center"><b><font color="#3399FF"><span style="font-size:10pt;">Your 

IP is&nbsp;</span></font><font color="#0066FF"><span style="font-size:11pt;">(자신의아이피)</span></font></b></p>

<p align="center"><b><font color="#0066FF"><span style="font-size:11pt;">&nbsp;</span></font></b></p>

<p align="center"><b><font color="red" face="맑은 고딕"><span style="font-size:11pt;"></span></font></b></p>

<br>

<font color="#0066FF"><br><center><span style='font-size:9pt'>[ ipip.kr은 트래픽 부하 없이 간단하게 자신의 IP를 보여주는 사이트입니다. ]<br><br><br>Copyright @ 2000~2013 HACKERSCHOOL All right reserved.

<br>

</body>

</html>




이런식의 결과가 나오게 되는데 (자신의아이피) 라고 써저있는 곳은 파싱했을 때 파싱한 컴퓨터의 공인아이피가 나오는 자리이다

간단하게 보기 위해서는 아래 복잡한 부분이 아닌 위의 <title> 부분의 아이피를 replace 로 추려내어

쉽게 아이피 값만 얻어 올 수 있다.


부가적으로

<title>Your IP is (자신의아이피)</title>


이 구문에서 자신의 아이피만 남기고 모두 지우는 방법은

replace를 사용해 자신의 아이피만 남기고 앞 뒤를 모두 빈칸으로 치환해버리면 간단하게 끝난다.

 

안녕하세요, 티거입니다.

현재 마인크래프트 플러그인 유료 제작을 받고 있습니다.
방송용, 서버용, 기타 등등 여러 가지 용도의 플러그인 전부 받고 있고요.
대략적인 가격은 아래를 참고하시길 바랍니다.





[ 가격표 ]

기본료 [ 15,000원 ]
Config 사용 [ 5,000원 / 무한 생성 시 7,000원 ]
Chest(인벤토리) 사용 [ 5,000원 / 무한 생성 시 7,000원 ]
타 플러그인 연동 [ 8,000원 ]
스코어보드 이용 [ 10,000원 ]
제작자 정보 지움 [ 7,000원 ]

* 이 외에도 제작 난이도나 기간에 따라 가격이 변동될 수 있습니다.







[ 라이선스 ]

Default [ 0원 ]
   이 라이선스는 의뢰자의 라이선스 선택이 없을 시 자동으로 선택되는 기본 라이선스입니다.
    가격 추가가 없으나, 의뢰자는 플러그인 배포 또는 판매, 수정 권한이 없습니다.
    판매자는 해당 플러그인을 배포 또는 판매가 가능하며, 재수정 또한 가능합니다.

Standard [ 6,000원 ]
   이 라이선스는 플러그인 구매가격에 추가 금액이 붙습니다.
    의뢰자는 플러그인 배포 또는 판매, 수정 권한이 없습니다.
    판매자도 의뢰자와 같이 플러그인 배포 또는 판매, 수정 권한이 없습니다.

Premium [ 10,000원 ]
    이 라이선스는 플러그인 구매가격에 추가 금액이 붙습니다.
    의뢰자는 플러그인 배포 또는 판매, 수정 권한이 있습니다.
    하지만 판매자는 의뢰자와 달리 플러그인 배포 또는 판매, 수정 권한이 없습니다.

* 제작 후 판매 시 가치가 없거나 저작권상 문제가 야기될 수 있는 플러그인은 Default 라이선스를 사용하실 수 없습니다.







[ 필독 사항 ]

* 댓글, 쪽지, 메일로 문의하지 마세요. 아래 연락처에서만 문의를 받습니다.
* 만약 위의 라이선스를 불이행할 경우 플러그인 사용에 제약이 있거나 다른 불이익이 있을 수 있습니다.
* 위의 가격은 대략적인 가격을 알기 쉽게 만들어놓은 것입니다. 가격은 변동될 수 있습니다.
* 문의 시, 본문에 명확히 기재되어있는 상황을 물어보시면 즉시 차단합니다.
* 거래하시는데 믿지 못하시다면 거래하지 않으시면 됩니다.

* 문화상품권, 계좌이체, 무통장입금으로 거래가 가능합니다






[ 신청방법 ]

위의 사항들을 숙지하지 않고 신청할 경우 차단합니다.
아래의 신청서대로 작성하시면 하루에 한번 확인해서 가격 확인 후 메일 보내드립니다.

현재 의뢰 신청을 받지 않습니다. 수정 시점(17/01/20)일 기준으로 2년 정도 받지 않을 계획입니다.
아마 신청을 받게된다면 2019년 봄 아니면 여름에나 시작할 듯합니다.







[ 거래자 목록 ]

* 이 목록은 거래의 신뢰도를 높히기 위해 적혀집니다.
겟스님
카이로스님
찬님
킴거북님
지혜님
럭키님
카이님 
오자님
HS역사님 (16/10/01 거래완료)
김재학님 (16/10/02 거래완료)
노이님 (16/10/05 거래완료)
준 블... 님 (거래 중)
노이님 (17/01/04 거래완료)

거래 감사드립니다 :)