안드로이드 개발 질문/답변
(글 수 45,052)
안드로이드내에서 서버 + 클라이언트를 구현하면 잘 돌아가는데 서버를 자바로 구동하고, 안드로이드를 클라이언트로 해서 접속을 시도해보려니 자꾸 오류가 납니다.서버는 잘 돌아가지만, 클라이언트 접속할때 클라이언트 오류가 납니다.방화벽 설정에서 포트 다 열어 주었구요. 혹시 몰라 밑에 코드 적어 놓겠습니다. 로그캣도 같이 올립니다.선배님들 도움좀 부탁드릴게요. ㅠㅠ================================================================================================================
서버 + 클라이언트 통합 : 안드로이드 구동
package com.android.socket;
서버 + 클라이언트 통합 : 안드로이드 구동
서버 + 클라이언트 통합 : 안드로이드 구동
import java.io.*; import java.net.*;
서버 + 클라이언트 통합 : 안드로이드 구동
import android.app.Activity; import android.os.Bundle; import android.util.*;
서버 + 클라이언트 통합 : 안드로이드 구동
public class SocketTest extends Activity {
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();
} 서버 + 클라이언트 통합 : 안드로이드 구동
public class TCPClient implements Runnable {
public static final String SERVERIP = "127.0.0.1";
public static final int SERVERPORT = 5500;
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, 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);
}
}
}
public class TCPServer implements Runnable{
public static final String SERVERIP = "127.0.0.1";
public static final int SERVERPORT = 5500;
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);
}
}
}
}클라이언트 - 자바
package com.android.socket;
클라이언트 - 자바
클라이언트 - 자바
import java.io.*; import java.net.*;
클라이언트 - 자바
import android.app.Activity; import android.os.Bundle; import android.util.*;
클라이언트 - 자바
public class SocketTest extends Activity {
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();
} 클라이언트 - 자바
public class TCPClient implements Runnable {
public static final String SERVERIP = "127.0.0.1";
public static final int SERVERPORT = 5500;
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(SERVERIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, 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);
}
}
}
}서버 - 자바
package TCP;
서버 - 자바
import java.io.*; import java.net.*;
서버 - 자바
서버 - 자바
public class SocketTest implements Runnable{
public static final String SERVERIP = "127.0.0.1";
public static final int SERVERPORT = 5500;
public static void main(String[] args){
Thread th = new Thread(new SocketTest());
th.start();
}
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
while (true) {
System.out.println("TCPserver - Waiting client connect ");
Socket client = serverSocket.accept();
System.out.println("TCPserver - Welcome to my client ");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("TCPserver - " + "S: Received: '" + str + "'");
} catch(Exception e) {
System.out.println("TCPserver - " + "S: Error");
} finally {
client.close();
System.out.println("TCPserver - " + "S: Done.");
} 서버 - 자바
}
} catch (Exception e) {
System.out.println("TCPserver - " + "S: Error");
}
}
} 로그캣 오류 결과
=============================================================================================================




서버 IP를 127.0.0.1로 하면 당연히 안되는게 맞습니다..무슨 말이냐면 에뮬 또는 핸드폰 자체도 컴퓨터라고 생각하셔야 합니다..그 자신이 고유의 IP를 받은 컴퓨터라고 보셔야 한다는거죠..그래서 127.0.0.1은 핸드폰 자신을 가리키는 겁니다..테스트를 하신다면 PC IP를 임의의 고정 ip로 하나 셋팅하시고 에뮬에서 서버 ip를 PC에 셋팅한 ip로 바꾼뒤에 테스트해보세요..