http://humaneer.net/71
를 참고하여 서버(pc) 클라이언트(애뮬) 로 하여
서버는 JAVA 컴파일하여 콘솔모드 실행
클라이언트는 애뮬을 돌려 실행했는데 accept()부분에서 블록 됩니다 (로그파일 확인)
애뮬레이터로 돌려서 그런건가요? 이유가 뭘까요?
=============서버=============
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPDesktopServer implements Runnable{
public static final int SERVERPORT = 9000;
public static final String SERVERIP = "10.225.50.10";
public void run() {
try {
System.out.println("S: Connecting...");
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
while (true) {
Socket client = serverSocket.accept(); //로그파일 확인해보니 요기서 걸리네요 ;;;
System.out.println("S: Receiving...");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("S: Received: '" + str + "'");
} catch(Exception e) {
System.out.println("S: Error");
e.printStackTrace();
} finally {
client.close();
System.out.println("S: Done.");
}
}
}
catch (Exception e) {
System.out.println("S: Error");
e.printStackTrace();
}
}
public static void main (String a[]) {
Thread desktopServerThread = new Thread(new TCPDesktopServer());
desktopServerThread.start();
}
}
==============클라이언트================
package com.androidbook.tcpclient;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
//import com.androidbook.tcpclient.TCPDesktopServer;
import android.util.Log;
public class TCPClient_Test implements Runnable {
public static final String SERVERIP = "10.225.50.10";
private static final String DEBUG_TAG= "MyFirstAppLogging";
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.i(DEBUG_TAG, "C: Connecting...");
Socket socket = new Socket("10.225.50.10", 9000); // 요 소켓 녀석이 제대로 된 리턴을 하지 못하는 듯....
String message = "Hello from Client";
Log.i(DEBUG_TAG, "Hello from Client");
try {
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
out.println(message);
Log.i(DEBUG_TAG, "C: Sent.");
Log.i(DEBUG_TAG, "C: Done.");
} catch (Exception e) {
Log.i(DEBUG_TAG, "S: Error");
} finally {
socket.close();
}
} catch (Exception e) {
Log.i(DEBUG_TAG, "Cli: Error."); //요 녀석이 뜨더군여;;
}
}
}
=================메인 Activity=====================
package com.androidbook.tcpclient;
import android.app.Activity;
import android.os.Bundle;
public class TCPClient extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Thread cThread = new Thread(new TCPClient_Test());
cThread.start();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.androidbook.tcpclient"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".TCPClient"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
위와 같이 AndroidManifest.xml 파일에서 퍼미션을 적용하여 해결했습니다 감사합니다 ^^