Android로 Socket 통신

3203 단어 AndroidSocket 통신
만약 어떤 링크의 응답이 독립 모드 (구글 플레이 스토어의 market://등) 라면 브라우저에서 호출 내용을 확인할 수 없습니다.확인하고 싶은 경우 다음과 같은 방법을 고려할 수 있다.
  • WebView에 WebView Client#shold Override(url)로 URL 보이기
  • Socket 커뮤니케이션에 요청한 반환값 표시
  • 이 중 소켓 통신은 자바의 API로 쉽게 구현할 수 있다.주의할 점이 있어서 총결산을 했습니다.

    실장 요점


    1. UI 스레드에서 네트워크 요청을 실행하지 마십시오.


    아무 생각 없이 콘센트를 만들려고 하면 N e t work On MainThereadException이 발생합니다.
    UI 스레드가 네트워크 통신을 허용하지 않기 때문입니다.(Android 3.0 이후)
    이번에는 AsyncTask에서 요청 수용을 고려하여 구현했습니다.
    
    public void connect(){
    
            //第一引数:execute()で入れるパラメータ
            //第二引数:onProgressUpdate()にいれるパラメータ
            //第三引数:onPostExecute()に入れるパラメータ
            new AsyncTask<Void,Void,String>(){
    
                @Override
                protected String doInBackground(Void... voids) {
                    Socket connection = null;
                    BufferedReader reader = null;
                    BufferedWriter writer = null;
                    String message = "result:";
                    String url = "http://" + mHost +":" + mPort + mPath;
                    try {
                        //ソケット
                        connection = new Socket(mHost, mPort);
                        reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
                        // ~~ 中略 ~~
    
                    return message;
                }
    
                //doInBackGroundの結果(message)を受け取る
                @Override
                protected void onPostExecute(String result){
                    mTextView.setText(result);
                }
            }.execute();
    
    
    
        }
    
    
    DoInBackground () 를 통해 통신 처리를 하고, 반환 값은 onPostExecute () 이다.
    onPostExecute를 사용하여 UI 스레드로 값을 반환합니다.

    2. 사용자 에이전트 지정


    아무 생각 없이 요청하면 이동통신에서 온 것으로 판정되지 않는다.상황에 따라 부정확한 답변이 있을 수 있다.
    따라서 요청 머리글에 User-Agent 정보를 추가합니다.예를 들어 서버의 안드로이드 4 와 같습니다.0으로 인식되려면
    private String mUserAgent = "Mozilla/5.0 (Linux; U; Android 4.0.4; ja-jp; SC-06D Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30";
    
    //BufferdWriterで設定
    writer.write("User-Agent: " + mUserAgent);
    
    
    User-Agent 정보는 여기를 참조하십시오. ->http://www.openspc2.org/userAgent/

    소스 코드


    상술한 내용을 설치한 응용 프로그램은 여기에 있다.안드로이드 스튜디오로 제작된 것이기 때문에 프로젝트 import을 실행한 후 실행하면 시작할 수 있습니다.
    https://github.com/tomoima525/SimpleSocketApplication

    참고 자료

  • 소켓 통신 설치
    http://ash.jp/java/java_http.htm
    http://x68000.q-e-d.net/~68user/net/java-http-socket-1.html
  • 좋은 웹페이지 즐겨찾기