마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 서버클라이언트 문제요

0 추천
package com.example.sadfasd;
 
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 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.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
private String html = "";
private Handler mHandler;
 
private Socket socket;
private String name;
private BufferedReader networkReader;
private BufferedWriter networkWriter;
public String ip = "127.0.0.1"; // IP
public int port = 5000; // PORT번호
 
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler();
 
try {
setsocket("127.0.0.1", 5000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
checkUpdate.start();
 
final EditText et = (EditText) findViewById(R.id.EditText01);
Button btn = (Button) findViewById(R.id.Button01);
final TextView tv = (TextView) findViewById(R.id.TextView01);
 
btn.setOnClickListener(new OnClickListener() {
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);
}
}
});
}
 
private Thread checkUpdate = new Thread() {
public void run() {
try {
String line;
Log.w("ChattingStart", "Start Thread");
while (true) {
 
Log.w("Chatting is running", "chatting is running");
line = networkReader.readLine();
html = line;
mHandler.post(showUpdate);
}
 
} catch (Exception e) {
}
}
};
 
private Runnable showUpdate = new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, "Coming word: " + html,
Toast.LENGTH_SHORT).show();
}
};
 
public void setsocket(String ip, int port) throws IOException {
socket = new Socket(ip, port);
try {
networkWriter = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
networkReader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
} catch (IOException e) {
System.out.println(e);
e.printStackTrace();
}
}
}
 
이게 클라이언트 인데요
 
setsocket()에서 오류가 나더라구요
 
머가문제일까요
 
 
서버는 자바프로젝트로 따로생성해서 했습니다.
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server implements Runnable {
 
public static final int ServerPort = 5000;
public static final String ServerIP = "127.0.0.1";
 
@Override
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 + "'");
 
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(client.getOutputStream())),
true);
out.println("Server 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[] args) {
 
Thread desktopServerThread = new Thread(new Server());
desktopServerThread.start();
 
}
}
 
 
이렇게 3가지이구.. 
 
 
현재 오류입니다..
 
ㅠㅠ 도와주세요
 
 
안드로이드개빡 (770 포인트) 님이 2015년 5월 20일 질문

1개의 답변

0 추천
127.0.0.1은 루프백 주소에요. 자바로 서버/클라이언트 테스트용도로 한컴퓨터에서 같이 돌릴때는

저렇게도 하지만, 안드로이드 단말에선 저렇게 쓰면안되요.

본인 서버 컴퓨터 ip를 써야합니다. 쉽게생각해서 각각 다른컴퓨터에 서버와 클라이언트가 있다고 보면됩니다.

그리고 아마 유동아이피 쓰실테니.. 외부에서 그 아이피로 바로 접근 못할꺼고,

그러면 공유기를 통해서 휴대폰이랑 서버컴퓨터랑 같은 망에 있게 만들어줘야 소켓통신이 가능해요.
아시리 (8,400 포인트) 님이 2015년 5월 20일 답변
근데 아이피땜에 에러가뜨지는 않을텐데.
매니페스트에 퍼미션도 한번 확인해보시고..
...