336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


성능 괘얀쿠나 하고 봤다가

마지막 클럭에 엄청난 반전이...

정말 내년 스마트폰들이 엄청 기대되는 상황

크로스 컴파일러가 네이티브 컴파일러 되는날이 머지 않은듯~!!

'Programming > ARM & Luminary Micro' 카테고리의 다른 글

Arm 어셈 명렁어  (0) 2008.04.03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
아무것도 모르는 백지 상태에서 그나마 개념을 잡게 해준 자료들~!!

Link - 참고로 naver cafe 가입을 해야 볼 수 있습니다

VOIP 강의 1
VOIP 강의 2
VOIP 강의 3
VOIP 강의 4
VOIP 강의 5
VOIP 강의 6
VOIP 강의 7
VOIP 강의 8
VOIP 강의 9
VOIP 강의 10  :  네트웍 강좌1, 네트웍 강좌2
VOIP 강의 11

그리고 VOIP에 대한 open source site

http://www.voip-info.org
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안드로이드 상에서 소캣통신 테스트를 위해 간단이 짜깁기해 만들어본 App.

호기심에 안드로이드로 서버를 구성해봤는데 뭐 당연한 결과겠지만 문제없이 잘 돌아감

좀더 이것저것 손볼까하다 귀차니즘에 결국은 컴팩트한 echo chat app.

Server
src

package test.server.tcp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

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

public class main extends Activity {
    /** Called when the activity is first created. */
 
 private ServerSocket socket;
 private int port = 9999;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        try {
   socket = new ServerSocket(port);
  }catch (IOException e) {
   Log.d("DMSG", "Error : " + e);
   //e.printStackTrace();
  }
  
  while(true) {
   try {
    Socket sock = socket.accept();
    Thread checkUpdate = new echoThread(sock);
    checkUpdate.start();
   }
   catch(IOException ex) {
   }
  }
    }
   
    class echoThread extends Thread {
     
    private Socket sock;

    public echoThread(Socket sock)
    {
       this.sock = sock;
    }
   
    public void run() {
     try {
          InetAddress addr = sock.getInetAddress();
          System.out.println(addr.getHostAddress() + "Connected..");

          BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
          PrintWriter pw = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));

          String msg = null;
         
          while((msg = br.readLine()) != null)
          {
             Log.d("DMSG", "From " + addr.getHostAddress() + "'s Message: " + msg);
             pw.println(msg + " ..(from server)");
             pw.flush();

             if(msg.equals("exit")){
                break;
             }
          }

          pw.close();
          br.close();
          sock.close();
       }
       catch(Exception e)
       {
          Log.d("DMSG", "Error : " + e);
       }
    }
  
 };
}


Client
src

package test.client.tcp;

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

import test.client.tcp.R;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

 

/* Called when the activity is first created. */
public class main extends Activity {

 private String strMsg = "";
 private String read = "";
 private String html = "";
 private Handler mHandler;
 private Socket socket;
 private BufferedReader networkReader;
 private BufferedWriter networkWriter;
 private String ip ="127.0.0.1";
 private int port = 9999;
 private PrintWriter out;
 
 private ListView mConversationView;
 
 private ArrayAdapter<String> mConversationArrayAdapter;
 
 @Override
 protected void onStop() {
  //TODO Auto-generated method stub
  super.onStop();
  try {
   Log.d("DMSG", "Socket close...ok");
   socket.close();
  }catch (IOException e) {
   Log.d("DMSG", "Socket close fail!");
   //TODO Auto-generated catch block
   e.printStackTrace();
  }
 }

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  mHandler = new Handler();
  
  try {
   setSocket(ip,port);
   Log.d("DMSG", "OK");
  }catch (IOException e1) {
   //TODO Auto-generated catch block
   e1.printStackTrace();
   Log.d("DMSG", "Error : " + e1);
  }
  
        mConversationArrayAdapter = new ArrayAdapter<String>(this, R.layout.message);
       
        mConversationView = (ListView) findViewById(R.id.in);
        mConversationView.setAdapter(mConversationArrayAdapter);
       
        mConversationView.setTextFilterEnabled(true);        
  
  Button btn = (Button) findViewById(R.id.Button01);
  
  btn.setOnClickListener(new OnClickListener() {
   EditText et = (EditText) findViewById(R.id.EditText01);
   public void onClick(View v) {
    if (et.getText().toString() != null || !et.getText().toString().equals("")) {
     /*PrintWriter*/ out = new PrintWriter(networkWriter,true);
     String return_msg = et.getText().toString();
     out.println(return_msg);
     out.flush();
     strMsg = "Send Message : " + return_msg;
     mConversationArrayAdapter.add(strMsg);
     Log.d("DMSG", "Msg = " + return_msg);
     
     et.setText("");
    } 
   }
  });
  
  try {
   Thread checkUpdate = new echoThread(mConversationArrayAdapter, out);
   checkUpdate.start();
  }
  catch(Exception ex) {
   Log.d ("DMSG", "Error : " + ex);
  }
 }

 class echoThread extends Thread {
  
  ArrayAdapter<String> conversationArrayAdapter;
  PrintWriter pw;
  String tmp;
  
  public echoThread(ArrayAdapter<String> mConversationArrayAdapter, PrintWriter out)
  {
   this.conversationArrayAdapter = mConversationArrayAdapter;
   this.pw = out;
   Log.d("DMSG", "Thread init.");
  }
  
  public void run() {
   try {
    while (true) {
     Log.w("DMSG","chatting is running");
     
     try {
      Thread.sleep(100);
     } catch (Exception e) {
      Log.d("DMSG", "Error : " + e);
     }
     
     read = null;
     while((read = networkReader.readLine()) != null)
     {
               Log.d("DMSG", "receive msg");
               mHandler.post(showUpdate);
     }

    }
   }catch (Exception e) {
    Log.d("DMSG", "Client Thread Error!" + e);
   }
  }
 };
 
 private Runnable showUpdate = new Runnable() {
  public void run() {
   Toast.makeText(main.this,"Coming word: " + html, Toast.LENGTH_SHORT).show();
   mConversationArrayAdapter.add("Receive Message : " + read);
  }
 };
 
 public void setSocket(String ip,int port)throws IOException { 
  try {
   socket =new Socket(ip, port);
   networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
   networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
   Log.d("DMSG", "Client Socket Init...");
  }catch (IOException e) {
   System.out.println(e);
   e.printStackTrace();
   Log.d("DMSG", "Client Socket Init fail!");
  }
 }
}


xml

 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ListView android:id="@+id/in"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll"
        android:layout_weight="1"/>
   <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <EditText android:id="@+id/EditText01"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
     android:layout_weight="1"/>
 
    <Button android:id="@+id/Button01"
     android:layout_width="80dip"
     android:layout_height="wrap_content"
     android:text="Send"/>
   </LinearLayout>
</LinearLayout>


xml(message.xml)
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:padding="5dp"/>

참고로 위의 App를 실행하기 위해선 AndroidManifest.xml에 아래와 같이 INTERNET permission을 추가해 주어야함

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

실행화면(client)

참고로 실행 장비가 Odroid-T라서 해상도및 비율이 일판 스마트폰들과는 조금 다르게 보임

'Programming > android' 카테고리의 다른 글

android에서 external command 사용하는 방법  (0) 2010.09.03
Supporting Multiple Screens  (0) 2010.05.20
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

지금은 인내의 시간!

매처럼 날려면 닭과 다투지 마라!

'끄적임' 카테고리의 다른 글

garmin connect IQ SDK  (0) 2016.05.09
내맘대로 계란말이  (0) 2010.09.17
결혼 뭐 하러 하노?  (0) 2010.09.07
계란 볶음밥  (0) 2010.09.06
2011 Mini Countryman!!  (0) 2010.09.03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

출근하자마자 당황하게 만드는 VMware error!

Error While powering on: The VMware Authorization Service is not running....

대처 방법은 간단하다

시작 -> 제어판 -> 관리도구 -> 서비스 -> VMware Authorization Service 다시 시작

'Programming > 그밖에...' 카테고리의 다른 글

Android froyo flash~!!  (0) 2010.11.19
컴퓨터 네트워크의 기초  (0) 2010.11.19
섹시한 라이브러리?? libsexy.so  (0) 2010.09.14
Android SDK 설치시 error  (0) 2009.11.20
S3C2440 Camera test 분석(진행중...)  (0) 2009.10.15
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



자취생 입장에서

계란보다 만만한 요리 재료도 없는것 같다

정신없는 하루를 보낸결과

귀찮음 더하기 피곤함에 밥은 하기 싫은데

배는 고프고...

그래도 끼니는 때워야 하기에

결국 집에 남아닜는 계란을 몽땅 이용 계란말이

계란에 우유약간과 소금간

그리고 약간의 파를 잘게 썰어

거품이 생길정도로 잘 흰자와 노른자를

잘 섞어주는게 포인트!

계란 7개를 한번에 해치웠더니 제법 배는 부르고

아직 잠들기에는 시간이 너무 이르고...-.ㅜ

'끄적임' 카테고리의 다른 글

garmin connect IQ SDK  (0) 2016.05.09
매처럼 날려면...  (0) 2010.10.08
결혼 뭐 하러 하노?  (0) 2010.09.07
계란 볶음밥  (0) 2010.09.06
2011 Mini Countryman!!  (0) 2010.09.03
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
리눅스에서 usr/lib 를 뒤지던 중

우연히 보게된 libsexy.so...

과연 무슨 라이브러리인데 이름을 섹시하게 지었을까?

궁금중에 바로 구글링~!!

http://www.chipx86.com/w/index.php/Libsexy

과연 난 대단한걸(19禁??) 기대했던걸까??

위 싸이트에서 보면 알겠지만

그져 GTK+ 용 위젯 라이브러리...

무식함이 절도 티나는 순간...-.ㅜ
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

내가 좋아하고 큰 감흥을준 글 중 하나인 법륜스님 주례사 

그리고 오늘 우연히 알게된 법륜스님의 주례사들을 묶은

결혼 뭐 하러 하노?

다른 읽고 있는 책이 있음에도

퇴근시간 되자마자 서둘러 달려가 산책

너무도 얇은 책이기에 깊히 정독을 해도

30분이면 충분히 읽을만한 책이지만

몇번이고 다시 읽고 싶은 글들...

'끄적임' 카테고리의 다른 글

매처럼 날려면...  (0) 2010.10.08
내맘대로 계란말이  (0) 2010.09.17
계란 볶음밥  (0) 2010.09.06
2011 Mini Countryman!!  (0) 2010.09.03
Rudy  (0) 2010.02.10
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


오랫만에 해 먹어본 계란 볶음밥

원래는 오므라이스 해먹으려 했는데

하루종일 놀다보니 장보러 가기 귀찮아 생략

덕분에 녹황색 채소가 빠져 보기도 심심 맛도 심심...

젠장 그나저나 월욜날 쉬는데다

일찍 퇴근해서 동네에 어슬렁 거리니

동네 사람들이 날 백수로 안다 -.ㅜ

'끄적임' 카테고리의 다른 글

내맘대로 계란말이  (0) 2010.09.17
결혼 뭐 하러 하노?  (0) 2010.09.07
2011 Mini Countryman!!  (0) 2010.09.03
Rudy  (0) 2010.02.10
크리스마스를 피하는법  (0) 2009.12.23
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.


<< PENTAX K-7 + 16-45 >>

+ Recent posts