마스터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일 질문

답변 달기

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