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

소켓통신에서 하나의 소켓으로 두번의 write와 한번의 read를 하는데 read가 안됩니다.

0 추천
package com.example.mom;
 
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
 
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
 
public class MainActivity extends Activity {
 
    private String ip = "192.168.1.40"; // IP
    private int port = 28000; // PORT번호
     private Socket socket;  
     private DataOutputStream outStream;
        private BufferedReader networkReader;
        private BufferedWriter networkWriter;
        static BufferedWriter bw ;
        static BufferedReader in;
        static DataInputStream dis;
        ImageButton ib;
        ImageButton ib2; 
        static Socket tcpSock = null;
         
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startActivity(new Intent(this,Loading.class));   
        setContentView(R.layout.activity_main);
        ib = (ImageButton)findViewById(R.id.menu_edit);
         
        ib2 = (ImageButton)findViewById(R.id.menu_e);
        //ib2.setEnabled(false);
    }
     
    public void pic(View v){
        new AsTempTask().execute(4);
        Intent intent = new Intent(this, Image.class);
        Log.i("kk", "picture");
        startActivity(intent);
    }
     
    public void play(View v){
      
          
        //ib.setEnabled(false);
        //ib2.setEnabled(true); 
        new AsTempTask().execute(2);
         
         Log.i("kk", "play");
    }
     
    public void notplay(View v){
         
         
        //ib.setEnabled(true);
        //ib2.setEnabled(false);
         Log.i("kk", "notplay");
        new AsTempTask().execute(3);
         
    }
     
    public void setSocket(String ip, int port) throws IOException {
  
        try {
            socket = new Socket(ip, port);
            Log.i("kk", "socket");
             
            networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            outStream = new DataOutputStream(this.socket.getOutputStream());
            //networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        } catch (IOException e) {
            System.out.println(e);
            e.printStackTrace();
        }
  
    }
     
     
 
     class AsTempTask extends AsyncTask<Integer, Integer, Long>{
 
            @Override
            protected void onCancelled() {
                super.onCancelled();
            }
 
 
            @Override
            protected void onPostExecute(Long result) {
                //dialog.dismiss();
                //RegisterActivity.lv.setAdapter(RegisterActivity.listAdapter);
                //pb.setVisibility(0);
                 
                //pd.dismiss();
                 
                super.onPostExecute(result);
 
 
            }
 
 
            @Override
            protected void onPreExecute() {
                //pb.setVisibility(1);
                Log.i("kk", "pre");
                //pd.show(Temperature.this, "", "Wait");
                super.onPreExecute();
            }
 
            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
            }
 
 
 
 
            @Override
            protected Long doInBackground(Integer... params) {
                Log.i("kk", "Do");
                long result = 0;
                int a = params[0];
                String ind = params[0].toString();
                //Socket tcpSock = null;
                Log.i("kk", "pre  "+                ind);
                //log.d("kk","a="+ params[0].toString());
                //Log.d("dd", "a=" + a); 
                 try {
                         
                        Log.i("kk", "socket!");
                        tcpSock = new Socket(ip, port);
                        Log.i("kk", "socket!!!");
                        bw = new BufferedWriter(new OutputStreamWriter(tcpSock.getOutputStream()));
                        in = new BufferedReader(new InputStreamReader(tcpSock.getInputStream()));
                        Log.i("kk", "trans = " + ind);
                        bw.write(ind);
                        Log.i("kk", "transsss");
                        bw.flush();
                        //dis = new DataInputStream(MainActivity.tcpSock.getInputStream());
                         
                        //Log.i("kk", "dis.read = " +MainActivity.dis.read(buff, 0, 30) +" "+ "dsdf = " + MainActivity.dis.read() + " dis.tostring = " + MainActivity.dis.toString());
                         
                       // setSocket(ip, port);
                        //outStream.writeChars("d"); 
                        //PrintWriter out = new PrintWriter(networkWriter, true);
                       // Log.i("kk", "lgo");
                        //out.println(params[0].toString());
                    } catch (IOException e1) {
                         Log.i("kk", "socketFailed");
                        e1.printStackTrace();
                        
                    }
                    
                   
                      
                 
                      
                   /*
                    try {
                         
                        tcpSock.close();
                        // Log.i("kk", "socketclose");
                    } catch (IOException e) {
                    // TODO Auto-generated catch block
                        e.printStackTrace();
                    }  */
                return result; 
            }  
        }
 
}

여기 두잉 백그라운데에서요 bw.write를 하게 다음 액티비티에서는 bw.write하나만 먹고 다음에 오는 datainputstream이 안먹습니다.

지금 몇시간째 고민중인데 안되네요 좀 도와주세요 ㅠㅠ

 

메인에서 bw를 주석처리하면 문제없이 진행되는데  혹시 연속해서 bw를 사용해서 쓰면 인풋이 안먹나요?ㅠ

 
후룰룰루 (240 포인트) 님이 2014년 12월 11일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...