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

자바-안드로이드 socket 통신 에러 해결좀부탁드립니다.

0 추천

안녕하세요 안드로이드 공부하는 학생입니다.

지금 자바서버와 안드로이드 소켓통신공부하는데

예제보면서 하는데도 계속 에러가 발생해서 질문드립니다.

서버(PC)와 안드로이드(폰)은 같은 네트워크상에 있는데도 서버열고 안드로이드로 실행하면

접속이 이뤄지질않습니다. 로그같이 첨부드리겠습니다

고수님들 답변부탁드립니다

//서버소스코드입니다.
public static void main(String[] args) throws IOException {
        serverSocket = null;
        clientSocket = null;
        out = null;
        in = null;
         
        serverSocket = new ServerSocket(8090);
        System.out.println("client wait...");
         
        try{
            clientSocket = serverSocket.accept();
            System.out.println("client connected...");
            out = new PrintWriter(clientSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            while(true){
                String inputLine = null;
                inputLine = in.readLine();
                System.out.println("received client msg : " + inputLine);
                out.print(inputLine + " - return message");
                if(inputLine.equals("quit")){
                    System.out.println("client disconnected...");
                    break;
                }
            }
            out.close();
            in.close();
            clientSocket.close();
            serverSocket.close();
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}
//클라이언트입니다
public class MainActivity extends Activity implements OnClickListener{
 
    private Socket socket;
    BufferedReader socket_in;
    PrintWriter socket_out;
    EditText ipEditText;
    Button connectBtn;
    TextView deName;
    String data;
    String serverIP;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        ipEditText = (EditText)findViewById(R.id.ipEditText);
        connectBtn = (Button)findViewById(R.id.connectBtn);
        deName = (TextView)findViewById(R.id.deName);
         
        connectBtn.setOnClickListener(this);
         
        serverIP = "192.168...";
         
        Thread worker = new Thread() {
            public void run() {
                try {
                    socket = new Socket(serverIP, 8090);
                    socket_out = new PrintWriter(socket.getOutputStream(), true);
                    socket_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                } catch(IOException e){
                    e.printStackTrace();
                }
                try {
                    while(true){
                        data = socket_in.readLine();
                        deName.post(new Runnable() {
                            public void run() {
                                // TODO Auto-generated method stub
                                deName.setText(data);
                            }
                        });
                    }
                } catch(Exception e){
                     
                }
            }
        };
        worker.start();
    }
 
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String data = ipEditText.getText().toString();
        Log.v("test", " " + data);
        if(data != null){
            socket_out.println(data);
        }
    }
     
    protected void onStop() {
        super.onStop();
        try{
            socket.close();
        } catch(IOException e){
            e.printStackTrace();
        }
    }
     
}

실습위주 (430 포인트) 님이 2014년 9월 12일 질문

2개의 답변

0 추천

로그상은 socket_out 값이 null 일 듯 한데요..

 

socket = new Socket(serverIP, 8090);
socket_out = new PrintWriter(socket.getOutputStream(), true); 에서 실패 한 듯 합니다.
 

AndroidMenifest.xml에 인터넷 퍼미션을 넣었는지 확인 해 보시고, 

소켓 생성시  나오는 Exception 값을 확인 해 보쎄요..

사악미소 (65,330 포인트) 님이 2014년 9월 12일 답변
0 추천

혹시 adt 상에서 테스트 하나요?

adt 상태에서는 아이피 주소가 10.0.2.2 이런식으로 가기 때문에 접속이 안될건데

되도록 하려면 telnet 으로 해서 redir add tcp 포트를 해줘야 통신이 될거구...

 

혹시나 해서 말씀드립니다

 

doridori2013@nate.com

익명사용자 님이 2014년 9월 12일 답변
...