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

소켓통신 클라이언트쪽 질문드립니다..ㅜㅠ

0 추천

안녕하세요?

암호화 시킨값을 다른 서버에 소켓으로 값을 던지려고 하는데요.

연결 실패가 나와서 질문드립니다..

메인에서 이렇게 해놨습니다.

     byte[] key = inputkey.getBytes();    // 암호화 key.
     byte[] str = inputstr.getBytes();            //암호화할 데이터
     /* 암호화 */
     System.out.println("Encryption--->"+inputkey);
     System.out.println("Encryption--->"+inputstr);
     
     System.out.println("Encryption--byte->"+key);
     System.out.println("Encryption--byte->"+str);
     //byte enDataByte[] = base64Encoding(seedEncrypt(str, key));
     byte enDataByte[] = Base64.base64Encode(SymmetricCipher.SEED_CBC_ENCRYPT(str, key));
     
     System.out.println("Encryption--->"+enDataByte);
     //암호화 성공
     System.out.println("Encryption--->"+new String(enDataByte));
     SocketThread socketthread = new SocketThread();
     socketthread.setDaemon(true);
     socketthread.start();

소켓통신은 스레드에서..

 

public class SocketThread extends Thread {
 public void run() {
  System.out.println("Encryption---Socket Thread -----------!");
  try {
   String host = "ip 넣었습니다.";
   //int port = 30147;
   int port = 30175;
   
   Socket socket = new Socket(host, port);
   ObjectOutputStream outstream = new ObjectOutputStream(socket.getOutputStream());
   outstream.writeObject("test");
   outstream.flush();
   System.out.println("Encryption--writeObject-================>"+outstream);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println("Encryption--error-================>" + e);
  }
 }
}

이렇게 해놨는데요,..

Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)

상대쪽에 확인해보니 아예 접속 시도조차 못했다고 하는데..

어디가 이상한지 좀 알려주시면 열심히 찾아보겠습니다..

 

감사합니다.

 

 

 

 

꾸우우 (1,140 포인트) 님이 2015년 9월 1일 질문
제가 상식이 없어서 많이는 모르지만 혹시 이중에서 될 수도 있을까해서 답변드려요. 서버랑 연결안되면 참짜증나져;

윗분 말처럼
1. 안드로이드에서 서버 ip설정을 localhost하면 안될테구요
  -> 아주 기본적이지만 ip랑 port 한번확인해보셧나요?
  -> 물론 String host = "ip 넣었습니다."; 이대로 사용했을거라 생각은 안하구여^^;
      설마해서요.. 아마 이렇게 하셧으면 그전에 다른 ERROR가 났겟죠 하하;

2. 고정아이피가 아닐때 (윗분 말씀처럼 포트포워딩을 하거나)
  -> 만약 서버가 와이파이로 작동한다면 스마트폰도 와이파이로 잡아서 테스트해보세요 ㅎ 그래서 접속이 된다면 포트포워딩하셔야되여

3. 안드로이드에서만 접속이 안된다고 하셧는데
혹시 메니페스트에서 인터넷 사용 퍼미션은 추가하셨는지요
-> 이것도 간단한 내용이지만 혹시 알면서도 깜빡할수도 있잖아요

아마 2번아니면 3번으로 간단히 해결할 수 도 있을거같네여
잘되시길 바랍니다.
혹시 가능하시면 서버쪽 소스조금 볼 수있나요


※ 그래도 계속 안된다면 다 주석하시고 아주 간단하게 통신만 해보세요
저도 이런경우에 주석하면서 하다보면 답이나오더라구요 실수한 부분도빨리찾고..

※ 그냥 제 짧은 의견으로는 안드로이드에서만 안받아지고 소스완벽한데 연결이 안된다면 2번이나 3번문제일 가능성이 큰거같아요
댓글 달아주셔서 감사합니다.
1-> 제 쪽의 211.xx.xx.xx 서버에서 다른 회사의 64.xxxxx 서버로 통신을 해야하는 상황이구요.
실제 ip주소를 넣었습니다.
3-> 추가되어있었습니당
2-> 고정아이피가 아닐때 라고 하셧는데 이게 서버 말씀하시는건가요?? 서버는 고정아이피가 맞습니다.


하나 추가로 궁굼한게 있는데요...
포트포워딩 이란게 안드로이드 단말기로 들어온걸 포워딩??하는건가요?? 아니면 211이라는 서버를 하는건가요..

웹뷰로 개발되어있습니다..
제가 진짜 안드로이드나.. 통신쪽에대해 아는게 없어서..
질문도 이상하고 아는것도 없습니다...ㅜㅠ

1개의 답변

0 추천
커넥션 타임아웃인데 접속 ip가 틀렸다던지 아니면 서버가 내려가있다던지 한 상황아닌가요?
익명사용자 님이 2015년 9월 1일 답변
안녕하세요. 일단 답변 달아주셔서 감사합니다.
리눅스에서

[root@qsh-2884 ~]# telnet ip주소 포트번호
Trying ip주소 ...
Connected to ip주소 (ip주소 ).
Escape character is '^]'.

이렇게 나옵니다.
이거면 포트가 열린 상태라고 검색후 알게되었습니다.

안드로이드 단말기에서만 저럽니다...ㅜㅠ
그렇다면 일단 이렇게도 생각해볼 수 있겠네요.
1.안드로이드에서의 ip 값이 서버 아이피 값이 아닌 localhost 일때.

- localhost 로 가버리면 안드로이드 디바이스나 avd는 자기 자신으로 인식합니다. 말하자면 서버지정을 단말기나 avd로 한셈이죠.

2. 인터넷 공유기를 사용할 때.

이건 확실히 모르겠는데요 아이피가 192.168.?.? 이면 공유기었던거 같습니다.
외부에서 접속할 수 있게 만들어야한다는데..(avd는 접속가능합니다)
'포트포워딩' 검색해보면 알수 있다 했습니다.


음...그리고 딱히 떠오르는건 또 없네요
...