[Proramming]/Android2011. 10. 2. 20:00

[Android] TCP/IP 프로그램 테스트 - 에뮬레이터 이용

[Android] TCP/IP 프로그램 테스트 - 에뮬레이터 이용

android의 WIFI 기능을 이용하면 네트웍으로 연결된 장치들을 쉽게 제어 가능하므로 안드로이드 측에서 TCP 소켓 통신 테스트를 해 두면 여러모로 쓰일곳이 많을 것 같다.


 

 Androd TCP/IP 테스트 프로그램소스코드

AndroidTCP.zip

 


TCP 접속 처리 함수
서버 IP는 PC의 IP를 입력하면 된다.

         InetAddress serverAddr = InetAddress.getByName(serverIP); 

         try
         {
                  socket = new Socket(serverAddr, serverPort);
                   
                   ctlText1.setText("성공");
          }
          catch (Exception e)
         {
                 ctlText1.setText("실패");    
          } 


TCP전송 처리 함수
             EditText message_box;
             message_box = (EditText) findViewById(R.id.editText3)

          try
          {
             PrintWriter out = new PrintWriter(new BufferedWriter(
              new OutputStreamWriter(socket.getOutputStream())), true);
             
             out.println(message_box.getText().toString());
          }
          catch (Exception e)
          {
             ctlText1.setText("Error:" + e);    
          }


데이처 수신 처리 함수
             try
             {
              BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              if(in != null)
              {
               DataInBuffer = in.readLine();
               tv.setText(DataInBuffer);
              }
             } catch(Exception e)
             {
              ctlText1.setText("Error:" + e);    
             }



주의사항
TCP테스틀 하기 위해서는 manifast 파일에 Uses Permission 설정을 해 주어야 한다. 설저 하지 않으면 TCP접속시 에러가 발생한다.




Android TCP 테스트
우선 가상 장치에서 TCP Client모드로 서버에 접속하는 예제 이므로, PC쪽에 서버가 필요하다.
서버 프로그램은  예전에 작성했던 TCP Server/Client Host Program(VC++) 예제 프로그램으로 테스트 한다.
  EthernetHost.exe

에뮬레이터에서 접속하면 이벤트 보내주고 데이터를 송수신 할 수 있다.




android TCP  소켓 테스트 예제 


Posted by nexp

댓글을 달아 주세요

  1. 통신

    관리자의 승인을 기다리고 있는 댓글입니다

    2013.03.06 17:02 [ ADDR : EDIT/ DEL : REPLY ]

[Proramming]/Android2011. 10. 1. 22:38

[Android] Thread 테스트 - 타이머 만들기

[Android] Thread 테스트 - 타이머 만들기

Thread를 이용하면 일정 주기로 특정한 처리를 할 수 있는 프로그램을 할 수 있다.
예를 들어 외부에 연결된 스위치를 감시 하거나, 0.1 초 주기로 센서 데이터를 읽어오거나,  TCP/IP 에서 들어온 데이터를 수신 하는등의 일을 처리 할 수 있다.

Thread 시작 함수 생성
Thread클래스를 이용하여 새로운 Thread를 생성하고 run() 함수를 재정의 해 주면 된다.

Thread 생성 방법 두가지

1) Thread 클래스를 상속받아 새로운 클래스 생성하여 run() 함수를 재정의하고 start() 함수 호출

ex) class myThread extends Thread
{
    public void run()
   {
        "   "
   }
}

myThread my_thread = new myThread();
my_rhread.start();

 

2)Runnable 인터페이스를 구현한 클래스를 만들어 run()함수를 정의 (Runnable 객체는 다른 클래스를 상속할 수 있으므로 보다 유연한다.)

ex) class myThread implements Runnable
{
    public void run()
   {
        "   "
   }
}

Thread my_thread = new Thread(new myThread());
my_rhread.start();

 


예를 들면 스위치 눌렀을 때 Thread1Start()함수를 실행하면 Thread 생성해서 동작하게 된다.
Thread에서 sleep(), wait(), yeild() 등의 함수를 호출하면 InterruptedException 이 발생할 수 있으므로 반드시 예외 처리를 해 주어야 한다.

    private void Thread1Start()
   {
        new Thread() {
            @Override
            public void run()
            {
             Timer1Process();
            }
        }.start();
    }
   
    //주기적으로 실행될 프로그램
    private void Timer1Process()
    {
     int i = 0;
        // 0.1초에 한번씩 데이터 증가
        while(true)
        {
            try
            {
               //메세지(데이터) 전송
                handler.sendEmptyMessage(i++);
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
            }
        }
    }




메시지 처리 함수
Thread 코드 내에서는 위젯사용을 할수 없는데 이를 해결하기 위해 메시지 핸들러를 이용한다.
Thread코드 내부에서는 위젯처리할 내용에 대한 메시지만 등록하고 처리는 Handler에서 받아서 처리하면 된다.
예를 들어 아래와 같이 TextView에 증가된 출력 할 수 있다.

    //메시지 처리 함수
    Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
                  ctlText1.setText("" + msg.what);
        };
    };


아래와 같이 import가 필요하다.
import android.os.Handler;
import android.os.Message;



ProgressBar를 이용하여 0.1초 간격으로 증가하는 프로그램
        ctlProcessBar1 = (ProgressBar)findViewById(R.id.progressBar1);
       
        ctlProcessBar1.setMax(100);
        ctlProcessBar1.setProgress(0);

    Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
         ctlText1.setText("" + msg.what);
         
         ctlProcessBar1.incrementProgressBy(2);
         ctlProcessBar1.setProgress(msg.what%100);
        };
    };


Posted by nexp

댓글을 달아 주세요

[Proramming]/Android2011. 9. 29. 22:00

[Android] 기본 위젯 테스트 - 슬라이드바(SeekBar)

[Android] 기본 위젯 테스트 - 슬라이드바(SeekBar)


        SeekBar seekBar;
        seekBar = (SeekBar) findViewById(R.id.seekBar1);
       
     seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
    {
         public void onStartTrackingTouch(SeekBar seekBar)
         {
          
         } 

         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)
         {
          //SeekBar 값 표시
          ctlText1.setText("PWM:"+progress+"%");
         }

         public void onStopTrackingTouch(SeekBar seekBar)
      {
      }
   });


Android SeekBar 테스트 실행 화면
Posted by nexp

댓글을 달아 주세요

[Proramming]/Android2011. 9. 27. 23:00

[Android] 기본 위젯 테스트 - Button, Text

[Android] 기본 위젯 테스트 - Button, Text
가장 기본적으로 입출력 할수 있는 Button, TextView 테스를 해 보자.

TextView 위젯 테스트
레이이아웃 에서 TextView위젯을 배치하고 각종 프로퍼티를 설정 할 수 있다. 코드에서는 이때 설정한 Id로 접근해서 제어 할 수 있다.



기본적인 메세지 출력 위젯으로 아래와 같이 제어 할 수 있다.
public class AndriodEX1Activity extends Activity {
 
 //TextView 객체 생성
 public TextView ctlText1;

 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
   //위젯 ID와 객체 연결
    ctlText1 = (TextView) findViewById(R.id.textView1); 

  //데이터 출력
  ctlText1.setText("Text Out Test");
}
}



버튼 위젯
버튼을 클릭 했을 때 특정 동작(Text에 출력) 하는 코드로 아래와 같이 처리 하면 된다.
public class AndriodEX1Activity extends Activity {
 
 //TextView 객체 생성
 public TextView ctlText1;

//버튼 객체 생성
 Button ctlButton1;

 /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
   //위젯 ID와 객체 연결
    ctlText1 = (TextView) findViewById(R.id.textView1); 

   //위젯 ID와 객체 연결
   ctlButton1 = (Button)findViewById(R.id.button1);


  //---------------------------------------------------------------------------------
  //버튼을 클릭 했을때 이벤트 처리

        ctlButton1.setOnClickListener(new Button.OnClickListener()
        {
         public void onClick(View v)
         {
         
          ctlText1.setText("버튼 클릭:"+m_Count);
          m_Count = m_Count+1;
         
         }
        });
  //---------------------------------------------------------------------------------

}
}


Android 용 간단한 위젯 테스트 프로그램




좀더 깔끔하게 프로그램 하기 위해 버튼처리 함수르 정의해서 처리하면 코드가 복잡해 졌을때 편리하다.

public class AndroidEx3ThreadActivity extends Activity implements View.OnClickListener{
 public TextView ctlText1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        ctlText1 = (TextView) findViewById(R.id.textView1);   

        //버튼 핸들러 등록
        (findViewById(R.id.button1)).setOnClickListener(this);
        (findViewById(R.id.button2)).setOnClickListener(this);
       
    }
   
    //버튼 처리 함수
    public void onClick(View v)
    {
     if(v.equals(findViewById(R.id.button1)))
     {
      //버튼 1처리
     }
     else if(v.equals(findViewById(R.id.button2)))
     {
      //버튼 1처리      
     }     
 }
}
Posted by nexp

댓글을 달아 주세요

[Proramming]/Mobile2011. 9. 25. 20:00

[Android] Hellow World 프로그램 작성

[Android] Hellow World 프로그램 작성

Android 개발 환경이 구축되었으니 가장 간단한 프로그램을 하나를 작성해 보자.

이클립스를 실행하고 New Project를 생성하면 위자드가 뜨고 Android용 프로젝트를 생성할 수 있다.




프로젝트를 명을 기입하고 적당한 Platform을 선택한다.
여기서 package name항목을 기입해야 다음으로 넘어 가는데...  우선 main.으로 시작 했다.




프로젝트를 생성하면 자동으로 코드가 생성된다. 간단하다~ ㅎㅎ
앞으로 원하는것을 추가 해 나가면 된다.



자동으로 생성된 Android 코드는 아래와 같다.
간산히 설명하면 처음 실행되는  onCreate()함수에 레이아웃 R.layout.main 를 출력하는 예제이다.
package main.AndroidEx1;

import android.app.Activity;
import android.os.Bundle;

public class AndroidEx1Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
    }
}


R.layout.main  는 레이아웃 폴더에서 확인 할 수 있고, 값을 변경할 수 있다.




자동으로 생성된 코드를 그대로 실행해 보면 아래와 같이 "Hellow World"문구를 출력하는 프로그램이 ADV에서 실행되는 것을 볼 수 있다.

Posted by nexp

댓글을 달아 주세요