Serverandroid app간에 데이터를 주고 받는 작업이 필요하여 간단하게 샘플 작업을 해보았습니다인터넷에 많은 예제가 널려 있는데 하나 더 던져 봅니다.  IPPC에 설정된 것으로 사용을 하기 위해 PC에 설정된(자동으로 잡히도록 되어 있으므로 다음에는 변할 수 있지만) 값을 찾아 봅니다.  ipconfig/all 명령으로 찾으면 됩니다.


andriod eclipse socket


 

1. Eclipse Server

 

서버에서는 IP는 사용하지 않고 port 번호만으로 접속 대기 상황을 만들면 됩니다그리고 client에서 연결 요청과 데이터가 들어오면 다시 보내주는 작업을 진행 합니다.

 

//client 접속 대기

Socket client = serverSocket.accept();

//client data 수신

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

String str = in.readLine();

//client 다시 전송

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

out.println("Server Received : '" + str + "'");

 

2. Android Client

 

Client 에서는 화면작업이 좀 있습니다그리고 문자를 입력 받아 서버에 보내주고 다시 받아오는 작업을 진행 합니다.

 

//소켓 생성
InetAddress serverAddr = InetAddress.getByName(ip);
 
socket =  new Socket(serverAddr,port);
//입력 메시지
String sndMsg = et.getText().toString();
//데이터 전송
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(sndMsg);
//데이터 수신
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String read = input.readLine();

 

그리고 인터넷을 사용하므로 Manifest.xml에 권한 설정을 해주면 됩니다.

 

<uses-permission android:name="android.permission.INTERNET" />

 

  

3. 결과 화면

 

안드로이드 클라이언트 화면입니다문자 입력과 전송버튼 그리고 서버로 부터 받은 데이터를 화면에 출력하는 기능이 있습니다.


andriod eclipse socket


이런... Connet 버튼은 테스트하려고 만들었는데 사용하지 않습니다삭제 안했네요.

 

서버쪽은 클라이언트에서 보내온 데이터를 콘솔에 출력만 합니다.


andriod eclipse socket


소스가 간단해서 설명도 간단 하네요.

 

4. 전체 소스

 

4.1 Eclipse Server

 

package egovframework.admin.chart.web;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

 

public class TCPServer implements Runnable {

 

             public static final int ServerPort = 9999;

//    public static final String ServerIP = "192.168.0.6";

 

             @Override

             public void run() {

                           try {

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

            ServerSocket serverSocket = new ServerSocket(ServerPort);

 

            while (true) {

                     //client 접속 대기

                Socket client = serverSocket.accept();

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

                try {

                   //client data 수신

                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

                    String str = in.readLine();

                    System.out.println("Received: '" + str + "'");

                    //client에 다시 전송

                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

                    out.println("Server Received : '" + str + "'");

                   

                } catch (Exception e) {

                    System.out.println("Error");

                    e.printStackTrace();

                } finally {

                    client.close();

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

                }

            }

        } catch (Exception e) {

            System.out.println("S: Error");

            e.printStackTrace();

        }

             }

            

             public static void main(String[] args) {

        Thread ServerThread = new Thread(new TCPServer());

        ServerThread.start();

     }

}

 

4.2 안드로이드 Client

 

activity_main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:app="http://schemas.android.com/apk/res-auto"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context=".MainActivity">

    <
TextView
       
android:id="@+id/TextView01"
       
android:layout_width="fill_parent"
       
android:layout_height="wrap_content" />

    <
EditText
       
android:id="@+id/EditText01"
       
android:layout_width="289dp"
       
android:layout_height="wrap_content"
       
android:layout_marginStart="92dp"
       
app:layout_constraintStart_toStartOf="@+id/Button01"
       
tools:layout_editor_absoluteY="0dp" />

    <
Button
       
android:id="@+id/Button01"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:text="Send" />

    <
Button
       
android:id="@+id/button02"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:layout_marginEnd="16dp"
       
android:layout_marginTop="456dp"
       
android:text="Connect"
       
app:layout_constraintEnd_toEndOf="parent"
       
app:layout_constraintTop_toTopOf="parent" />

    <
TextView
       
android:id="@+id/chatTV"
       
android:layout_width="fill_parent"
       
android:layout_height="381dp"
       
android:layout_marginTop="64dp"
       
app:layout_constraintTop_toTopOf="@+id/TextView01"
       
tools:layout_editor_absoluteX="0dp" />
</
android.support.constraint.ConstraintLayout>

 

 

AndroidManifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    
package="com.example.tcpclient">

    <
uses-permission android:name="android.permission.INTERNET" />

    <
application
       
android:allowBackup="true"
       
android:icon="@mipmap/ic_launcher"
       
android:label="@string/app_name"
       
android:roundIcon="@mipmap/ic_launcher_round"
       
android:supportsRtl="true"
       
android:theme="@style/AppTheme">
        <
activity android:name=".MainActivity">
            <
intent-filter>
                <
action android:name="android.intent.action.MAIN" />

                <
category android:name="android.intent.category.LAUNCHER" />
            </
intent-filter>
        </
activity>
    </
application>

</
manifest>

 

 

MainActivity.java


package com.example.tcpclient;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;


public class MainActivity extends AppCompatActivity {

   
private Handler mHandler;
    Socket
socket;
   
private String ip = "192.168.0.6"; // IP 주소
   
private int port = 9999; // PORT번호
   
EditText et;
    TextView
msgTV;

   
@Override
   
protected void onStop() {
       
super.onStop();
       
try {
           
socket.close();
        }
catch (IOException e) {
            e.printStackTrace();
        }
    }

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);

       
mHandler = new Handler();

       
et = (EditText) findViewById(R.id.EditText01);
        Button btn = (Button) findViewById(R.id.
Button01);
        Button btnCon = (Button)findViewById(R.id.
button02);
       
final TextView tv = (TextView) findViewById(R.id.TextView01);
       
msgTV = (TextView)findViewById(R.id.chatTV);

        btn.setOnClickListener(
new View.OnClickListener() {
           
public void onClick(View v) {
               
if (et.getText().toString() != null || !et.getText().toString().equals("")) {
                    ConnectThread th =
new ConnectThread();
                    th.start();
                }
            }
        });
    }

   
class ConnectThread extends Thread{
       
public void run(){
           
try{
               
//소켓 생성
               
InetAddress serverAddr = InetAddress.getByName(ip);
                
socket new Socket(serverAddr,port);
               
//입력 메시지
               
String sndMsg = et.getText().toString();
                Log.d(
"=============", sndMsg);
               
//데이터 전송
               
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                out.println(sndMsg);
               
//데이터 수신
               
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String read = input.readLine();
               
//화면 출력
               
mHandler.post(new msgUpdate(read));
                Log.d(
"=============", read);
               
socket.close();
            }
catch(Exception e){
                e.printStackTrace();
            }
        }
    }
   
// 받은 메시지 출력
   
class msgUpdate implements Runnable {
       
private String msg;
       
public msgUpdate(String str) {
           
this.msg = str;
        }
       
public void run() {
           
msgTV.setText(msgTV.getText().toString() + msg + "\n");
        }
    };
}

 

- copy coding -

프로젝트에서 가끔씩 사용되는 차트를 모아봤습니다.  Grid보다는 무료도 쓸만 한게 많은것 같습니다. 요즘에는 대부분 HTML 5를 지원하고 있고 데이터도 Json을 사용하도록 되어있어 사용법도 간단 합니다제품별 사이트에 있는 예제 화면을 모아보았습니다.

 

google chart

데모 : https://developers.google.com/chart/interactive/docs/gallery

무료 : https://creativecommons.org/licenses/by/4.0/deed.ko


java web chart google

java web chart google



Chart.js

https://www.chartjs.org/

데모 : https://www.chartjs.org/samples/latest/

      https://www.chartjs.org/docs/latest/ - source

무료 : MIT 

java web chart chartjs

java web chart chartjs

java web chart chartjs



APEXCHARTS

데모 : https://apexcharts.com/javascript-chart-demos/

무료 : MIT 


java web chart apexchart

java web chart apexchart

java web chart apexchart

java web chart apexchart



JFreeChart

데모 : http://www.jfree.org/jfreechart/samples.html

무료: The JFreeChart Developer Guide(유료)


java web chart jfreechart

java web chart jfreechart



C3.js

데모 : https://c3js.org/examples.html

무료 : MIT


java web chart c3js



AnyChart

데모 : https://www.anychart.com/products/anychart/gallery/

유료 : https://www.anychart.com/buy/


java web chart anychart

java web chart anychart

java web chart anychart

java web chart anychart

java web chart anychart



rMate Chart

데모 : http://demo.riamore.net/HTML5demo/chart/index.html

유료 : http://www.riamore.net/buy/license.html


java web chart rmate



amChart

데모 : https://www.amcharts.com/demos/

유료 : https://www.amcharts.com/online-store/


java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart

java web chart amchart



FusionCharts

데모 : https://www.fusioncharts.com/charts?product=fusioncharts

유료 : https://www.fusioncharts.com/buy


java web chart fusionchart

java web chart fusionchart

java web chart fusionchart

java web chart fusionchart


- copy coding -


금반지를 줍는 꿈 해몽

 -> 직장에서 승진하거나 사업에 있어서 중요한 계약을 하게 되는 등 행운이 따른다.


금쌍가락지를 오른손에 쥐고 있는 꿈 해몽

 -> 지금 추진하고 있는 계획이나 사업은 시간이 지나야 성사될 것을 암시하고 있다.


상자에 든 금반지를 상품으로 받는 꿈 해몽

 -> 매사에 부귀가 따르고 경사가 생길 것이다.


금반지가 손가락마다 끼여져 있는 꿈 해몽

 -> 집안에 경사스러운 일이 있고 형제자매가 한결같이 행운을 잡으며, 횡재, 돈, 기쁨, 소원성취 등의 길운이다.


밭에서 농사일을 하다가 황금을 캐낸 꿈 해몽

 -> 직책이 승진되거나 유산을 상속받거나 투자에서 큰 이득을 볼 것이다.


금을 발굴하거나 다루는 꿈 해몽

 -> 사람을 겉만 보고 판단하지 말아야 한다는 교훈이다.


금을 훔치거나 돈을 세는 꿈 해몽

 -> 인생에는 돈 이상으로 귀중한 것이 있다는 의미이다.


금메달, 동전 등과 관련된 꿈 해몽

 -> 조만간 발생할 수입을 암시한다.


금 덩어리를 수풀 속에서 발견하는 꿈 해몽

 -> 국보급 보물이나 유물을 출토하며 새로운 문화를 창조하여 명성이 높아지거나, 많은 재물이 생겨 부를 축적한다.


흙을 파서 금은보화나 고고학적 유물을 얻는 꿈 해몽

 -> 어떤 기관에서 연구나 사업성과를 얻고 권리나 횡재가 생긴다.


금은 보화의 물체가 빛을 발하거나 그 빛이 하늘에 닿는 꿈 해몽

 -> 업적, 작품 등이 크게 성취되어 많은 사람들에게 인정을 받는다.


dream money coin 꿈해몽



옷장 안에 은 덩어리가 찬란하게 빛나는 꿈 해몽

 -> 새로운 질서가 형성되면서 부귀공명하고 출세하든지, 사업이 잘되고 재물과 돈이 들어온다.


은으로 만들어진 귀걸이 꿈 해몽

 -> 자신이 다른 사람에게 엄한 평가를 받는다.


은제품과 관련된 꿈 해몽

 -> 은 제품은 승진을 나타내지만, 지나친 낙관은 일을 더 어렵게 만든다.


뭉칫돈이 장롱 안의 서랍에 가득한 꿈 해몽

 -> 현실적으로 경제적으로 풍요해지거나, 문서상 즐거운 일이 있다.


바람을 타고 지폐가 집안으로 들어오는 꿈 해몽

 -> 먼 곳에서 우편물이나 기쁜 소식이 전해진다.


하늘에서 지폐나 동전이 쏟아지는 꿈 해몽

 -> 재물이나 이득을 매우 많이 얻게 된다.


돈을 많이 소유하고 있는 꿈 해몽

 -> 진행하는 일에 있어 만족한 결과를 얻고, 생각만큼의 돈도 생기게 된다.


돈이 든 가방을 줍는 꿈 해몽

 -> 큰 돈이 들어오거나 지위가 상승하게 될 것이다.


어느 누가 돈이 든 가방을 주는 꿈 해몽

 -> 가까운 시일내에 주택을 장만한다는 암시이다.


소액의 돈이 하늘에서 떨어지는 꿈 해몽

 -> 근심과 사고가 생겨 피해를 입게 될 것을 암시하고 있다.


지갑에 돈이 가득한 꿈 해몽

 -> 넉넉한 재물을 얻어서 일신이 편안하게 된다.


재물을 얻거나 돈을 줍는 꿈 해몽

 -> 소망하던 일이 점점 성취되고 사업이 번성하여 생활의 안정을 누리게 된다.


타인에게 지폐를 받는 꿈 해몽

 -> 직장이나 사업에 발전이 있어서 매사에 안정을 이루게 된다.


돈을 조금 가지고 있는 꿈 해몽

 -> 근심 걱정거리가 생겨서 생활이 불안정할 징조이다.


헌 돈을 줍는 꿈 해몽

 -> 돈의 액수와 비례하여 걱정거리가 생기고, 다른 사람과 다투는 일이 발생된다.


깨끗한 동전을 얻는 꿈 해몽

 -> 새로운 사람을 소개받거나 새로운 일자리를 구하게 된다.


녹슨 동전을 줍는 꿈 해몽

 -> 장기간 병석에 누워 있던 사람의 사망소식을 접하게 될 징조이다.


길에서 녹슨 동전을 줍는 꿈 해몽

 -> 가까운 사람에게 우환이 닥칠 조짐이다.


동전을 주워 주머니 속에 넣는 꿈 해몽

 -> 가까운 사람과 사소한 일로 시비를 벌리는 재수없는 일을 당하게 된다.


돈이 종이로 바뀌는 꿈 해몽

 -> 다른 사람의 압력을 받아 내키지 않는 일을 하게 된다.


돈이 나뭇잎으로 바뀌는 꿈 해몽

 -> 사업자본이 풍족해질 징조이다.


본인의 물건을 돈으로 바꾸는 꿈 해몽

 -> 물건에 비례하여 손재수를 당하게 될 징조이다.


수표를 보는 꿈 해몽

 -> 가족간에 다툼이 있어서 가정이 시끄러울 징조이다.


산속에서 기도하다가 보니 넓은 바위 위에 지폐가 쌓여 있는 꿈 해몽

 -> 사업이 번창하고 소망이 성취된다.


수표인 줄 알고 받았는데 앞뒷면에 아무 것도 쓰여 있지 않아 의아했던 꿈 해몽

 -> 무리한 투자로 적자가 계속되거나 사기를 당할 징조이다.


누가 준 지폐가 문서나 편지로 변하는 꿈 해몽

 -> 다른 사람의 명령이나 소식에 의해 근심 걱정이 생길 것이다.


돈을 세고 있는 꿈 해몽

 -> 예상하지 못한 지출이 있게 될 것이다.


월급봉투를 받아 명세표를 보면서 계산을 하는 꿈 해몽

 -> 자신이 정당한 대우를 못 받아서 불만이 많다는 것을 나타내는 꿈이다.


길에서 지폐를 줍는 꿈 해몽

 -> 일이 순성하고 돈이 들어오게 될 길몽이다.


주인 없는 서류가방이 있길래 열어 보니 지폐가 가득한 꿈 해몽

 -> 주위의 환경에 힘입어 고위직에 배치되고 부와 명예를 누리게 된다.


지폐 다발이 공중에서 흩어지며 날리는 꿈 해몽

 -> 관제 구설에 휘말리기 쉽다.


금고에 있던 돈을 도둑맞는 꿈 해몽

 -> 가족끼리 불화가 생기거나 절친한 사람과 멀어지거나,살림이 가난해질 암시이다.


모르는 사람에게 돈을 차용해달라고 사정하는 꿈 해몽

 -> 사업주는 회사에 노사분규가 일어날 것이고, 공직자는 비리사건에 연루되어 고생을 하게 된다.


동전을 강물에 던져 버리는 꿈 해몽

 -> 상황이 더욱 나빠지며,적자가 계속되며 회생의 가능성이 보이지 않는다.


하늘에서 동전이 쏟아지는 꿈 해몽

 -> 여러 가지 행운이 찾아오고 재물이 모인다.


돈상자를 잔뜩 짊어지고 가는 말을 보는 꿈 해몽

 -> 일이 풀리지 않아 고생할 징조이며, 사업은 고전하게 된다.


동전이 많이 쌓여 있어서 자루에 담는 꿈 해몽

 -> 주식투자에서 큰 이익을 보거나 복권에 당첨되는 등의 행운이 따를 꿈이다.


곗돈을 타오는 꿈 해몽

 -> 재물, 보험, 예금, 복권 등과 관련된 일이 발생한다.


노임을 받지 못하는 꿈 해몽

 -> 여러가지로 고통을 당하여 어려운 생활을 하게 된다.


- copy coding -

 

작업 환경

eGovFramework Version : 3.8

Eclipse Version : Oxygen.3a Release (4.7.3a)

JDK Version : 1.8

 

전자정부 프레임워크에 기본적으로 적용되어 있는 웹에디터가 있는데 이것이 ckeditor 입니다물론 처음부터 바로 사용할 수 있도록 되어 있는것은 아니고 프로그램 내에 포함은 되어 있는데 개발자가 다른 웹에디터를 적용할 수도 있기 때문에 ckeditor가 기본으로 설정이 되어 있지는 않고 사용을 하려면 조금 손을 봐야 합니다.

처음 게시판에 글을 쓰려고 하면 나오는 화면이 아래와 같이 일반 텍스트 모드의 입력 폼이 나타 납니다.


전자정부 프레임워크 ckeditor



1. ckeditor lib 폴더복사

내용 입력 부분에 ckeditor를 포함하도록 하려면 ckeditor 라이브러리가 있어야 합니다.  egovframework template project에서 common all-in-one 프로젝트를 설치 하거나


전자정부 프레임워크 ckeditor


all-in-one 압축파일을 해제 합니다

그리고 /src/main/webapp/html/egovframework/com/cmm/utl/ckeditor 폴더를 찾습니다.


전자정부 프레임워크 ckeditor

 

ckeditor 폴더를 개발 프로젝트의 동일한 위치로 복사해 놓습니다.

 

2. pom.xml 설정 확인

 

pom.xml에 다음과 같이 dependency가 설정 되어 있는지 확인합니다.

기본적으로 설정이 되어있는데 없다면 추가해주면 됩니다.

        <dependency>

            <groupId>com.ckeditor</groupId>

            <artifactId>ckeditor-java-core</artifactId>

            <version>3.5.3</version>

        </dependency>

 


3. jsp 파일 수정

이제 게시판에 사용되는 jsp 파일을 수정 합니다.

/프로젝트명/src/main/webapp/WEB-INF/jsp/egovframework/com/cop/bbs/EgovArticleRegist.jsp

기본적으로 ckeditor 관련 설정들이 jsp 파일에 포함되어 있습니다.

<script type="text/javascript" src="<c:url value='/html/egovframework/com/cmm/utl/ckeditor/ckeditor.js?t=B37D54V'/>" ></script>

 

var ckeditor_config = {

                  //filebrowserImageUploadUrl: '${pageContext.request.contextPath}/utl/wed/insertImageCk.do', // 파일 업로드를 처리 경로 설정.

                  filebrowserImageUploadUrl: '${pageContext.request.contextPath}/ckUploadImage', // 파일 업로드를 처리 경로 설정(CK필터).

         };

         CKEDITOR.replace('nttCn',ckeditor_config);

 

CKEDITOR.instances.nttCn.updateElement();

 

여기에 추가적인 작업을 해줘야 사용이 가능 합니다.

먼저 상단 taglib들이 있는 곳에 ckeditor taglib를 추가해 줍니다.

 

<%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %>

 

 

글 내용 부분에 ckeditor 를 추가 합니다.  처음에는 ckeditor내용 없이 되어 있습니다.

<!-- 내용  -->

<c:set var="title"><spring:message code="comCopBbs.articleVO.regist.nttCn"/> </c:set>

<tr>

         <th><label for="nttCn">${title } <span class="pilsu">*</span></label></th>

         <td class="nopd" colspan="3">

                  <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />  

           ============================ CKeditor 관련 추가 ============================

                  <div><form:errors path="nttCn" cssClass="error" /></div> 

         </td>

</tr>


여기에 하단처럼 한줄을 추가 합니다.

<!-- 내용  -->

<c:set var="title"><spring:message code="comCopBbs.articleVO.regist.nttCn"/> </c:set>

<tr>

         <th><label for="nttCn">${title } <span class="pilsu">*</span></label></th>

         <td class="nopd" colspan="3">

                  <form:textarea path="nttCn" title="${title} ${inputTxt}" cols="300" rows="20" />  

                  <ckeditor:replace replace="nttCn" basePath="${pageContext.request.contextPath}/html/egovframework/com/cmm/utl/ckeditor/" />

                  <div><form:errors path="nttCn" cssClass="error" /></div> 

         </td>

</tr>

 

이제 화면을 새로고침 하고 다시 입력화면을 클릭하면


전자정부 프레임워크 ckeditor


짜잔적용이 되었습니다.

ckeditor 폴더를 복사하고 jsp 파일에 두줄 추가하면 되는군요.


- copy coding -


1···27282930313233···61

+ Recent posts