맞춤검색
2009.03.11 17:22

[펌] 안드로이드 소켓통신

출처는 명확하지 않음-_-;; 원작성자 분에게는 죄송합니다;
앞의 2009/03/10 - [Computer Science/Android] - [펌]Android에서의 TCP/IP 통신 글의 코드와 매우 유사하긴 하지만.. 뭔가 더 간단하고 예제는 많을 수록 좋으므로;(-_-)

SocketTest.java

Java:

public class SocketTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
       
        Thread sThread = new Thread(new TCPServer());
        Thread cThread = new Thread(new TCPClient());
       
        sThread.start();
        try {
               Thread.sleep(1000);
          } catch (InterruptedException e) { }
       
          cThread.start();
    }
}


TCPServer.java

Java:

public class TCPServer implements Runnable{
     
    public static final String SERVERIP = "127.0.0.1";
    public static final int SERVERPORT = 4444;
         
    public void run() {
         try {
              Log.d("TCP", "S: Connecting...");
             
              ServerSocket serverSocket = new ServerSocket(SERVERPORT);
              while (true) {
                 Socket client = serverSocket.accept();
                 Log.d("TCP", "S: Receiving...");
                 try {
                      BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                      String str = in.readLine();
                      Log.d("TCP", "S: Received: '" + str + "'");
                    } catch(Exception e) {
                        Log.e("TCP", "S: Error", e);
                    } finally {
                         client.close();
                         Log.d("TCP", "S: Done.");
                    }

              }
             
         } catch (Exception e) {
           Log.e("TCP", "S: Error", e);
         }
    }
}


TCPClient.java

Java:

public class TCPClient implements Runnable {

     
    public void run() {
         try {
           
           InetAddress serverAddr = InetAddress.getByName(UDPServer.SERVERIP);
           
           Log.d("TCP", "C: Connecting...");
           Socket socket = new Socket(serverAddr, TCPServer.SERVERPORT);
           String message = "Hello from Client";
               try {
                Log.d("TCP", "C: Sending: '" + message + "'");
                PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
               
                out.println(message);
                Log.d("TCP", "C: Sent.");
                  Log.d("TCP", "C: Done.");
               
             } catch(Exception e) {
                 Log.e("TCP", "S: Error", e);
                } finally {
                  socket.close();
                }
         } catch (Exception e) {
              Log.e("TCP", "C: Error", e);
         }
    }
}




AndroidManifest.xml

XML:

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

    <application android:icon="@drawable/icon">
        <activity class=".SocketTest" android:label="@string/app_name">
            <intent-filter>
                <action android:value="android.intent.action.MAIN" />
                <category android:value="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
Trackback 0 Comment 3
  1. ;.,; 2009.07.16 23:01 신고 address edit & del reply

    아... 그렇군

  2. 2009.08.12 17:36 address edit & del reply

    비밀댓글입니다

    • 빵새 2009.08.14 00:43 신고 address edit & del

      아.. 저도 고생을 많이 했어요;
      이런 저런 방법으로 해도 안돼서..
      찾으시는게 이 부분일지는 저도 잘 모르겠는데, 소켓 통신의 성공만을 초점에 두신 거라면..
      http://www.wiseant.net/blog/65
      이 포스팅을 보시면 아주 자세히 나와있습니다.
      VLAN이라는 특별한 방식으로 에뮬레이터를 구동시켜서 일어나는 현상이라고 하던군요..
      시간날 때, www.android.com 에 들어가셔서 에뮬레이터 관련 이슈들을 읽어보시면 많은 도움이 되실 듯합니다.
      사실 저는 안드로이드 어플리케이션 쪽에는 전문가가 아니고 포팅 쪽을 주로 공부하였기 때문에 자세한 것은 잘 모릅니다.
      짧은 지식이라도 필요한 부분이 있으시면
      pluckyman@gmail.com
      이 제 메일 주소랍니다.
      방문해 주셔셔 감사해요ㅎ