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

WIFI 소켓 질문이요..

0 추천

자동차 진단 OBD, ELM327 v1.5 를 이용하여 자동차 신호를 받아오려고 합니다.

통신은 WIFI 모델입니다. IP 192.168.0.10 PORT 35000 입니다

TCP소켓을 통해 통신하는 것으로 알고있어서

코드를 짜보았습니다.

package com.example.client;

import java.io.*;
import java.net.*;
import java.util.Scanner;

import android.app.*;
import android.support.v7.app.ActionBarActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.*;
import android.view.View.*;
import android.widget.*;

public class MainActivity extends ActionBarActivity {

	private EditText edtTextAddress;
	private EditText edtTextPort;
	private Button btnConnect;
	private Button btnClear;
	private TextView txtResponse;
	
	Socket socket;
	String response;
	DataOutputStream dos;
	DataInputStream din;
	
	NetworkTask myClientTask;
	
	ByteArrayOutputStream baos = new ByteArrayOutputStream();
	byte byteBuffer[] = new byte[8];
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		edtTextAddress = (EditText) findViewById(R.id.address);
		edtTextPort = (EditText) findViewById(R.id.port);
		btnConnect = (Button) findViewById(R.id.connect);
		btnClear = (Button) findViewById(R.id.clear);
		txtResponse = (TextView) findViewById(R.id.response);
		
		btnConnect.setOnClickListener(buttonConnectOnClickListener);
		btnClear.setOnClickListener(new OnClickListener(){
			public void onClick(View v){
				txtResponse.setText("Close");

			}
		});
	}
	
	OnClickListener buttonConnectOnClickListener = new OnClickListener(){
		public void onClick(View arg0){
			NetworkTask myClientTask = new NetworkTask(
					edtTextAddress.getText().toString(),
					Integer.parseInt(edtTextPort.getText().toString())
					);
			myClientTask.execute();
		}
	};
	
	public class NetworkTask extends AsyncTask<String, Integer, String>{
		
		String dstAddress;
		int dstPort;
		
		BufferedWriter socket_out;
		PrintWriter out;
		
		
		NetworkTask(String addr, int port){
			dstAddress = addr;
			dstPort = port;
		}
		
		@Override 
		 protected void onPreExecute() {
		       super.onPreExecute(); 
		 }
		
		@Override
		protected String doInBackground(String... arg0){
			
			try{
				Log.e("socket","Init");
				Socket socket = new Socket(dstAddress, dstPort);

				Log.e("socket","pass");
				
				dos = new DataOutputStream(socket.getOutputStream());
			    din = new DataInputStream(socket.getInputStream());
			    Scanner scanner = new Scanner(socket.getInputStream());
			    
			    
			    PrintWriter pw = new PrintWriter(socket.getOutputStream());
			    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
			    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			    
			    
			    while(socket.isConnected())
			    {
			    	
			    	dos.writeBytes("010C");
			    	//dos.writeUTF("010c");
			    	
			    	dos.flush();
			    	
				    Log.e("Send","010C");
				    

				                  
			    	for(int i; (i=din.read(byteBuffer)) != -1; )
			    	{
			    	    baos.write(byteBuffer, 0, i);
			    	}

			    	byte result[] = baos.toByteArray();
			    	response = getString(result);
			    	
				    
				    String str1 = response;
				    Log.e("Receive",str1);
				    
				    //response = scanner.nextLine();
				    String[] str = new String(response).split(" ");
				    int i = ((Integer.parseInt(str[2],16) * 256 + Integer.parseInt(str[3],16))/4);
				    response = Integer.toString(i);
				    Log.e("text",response);
				    publishProgress(1);
				    

				    try
					{
						Thread.sleep(100);
					}
					catch(InterruptedException e)
					{
						e.printStackTrace();
					}
			    }
			    
				//socket.close();
				
			}catch(UnknownHostException e){
				e.printStackTrace();
			}catch(IOException e){
				e.printStackTrace();
			}

			return null;
		}
		
		@Override
		protected void onProgressUpdate(Integer...integers){
			Log.e("Prog","pass");
			txtResponse.setText(response);
		}
		
		@Override
		protected void onPostExecute(String result){
			Log.e("Post","pass");
			super.onPostExecute(result);
		}
	}
	
	
	public static String getString(byte[] data) {
		 String text = null;
		 try {
		  text = new String(data, 0, data.length - 2, "UTF-16LE").replaceAll("\r\n", "\n");
		 } catch (UnsupportedEncodingException e) {
		  e.printStackTrace();
		 }
		 return text.trim();
		}
	
	

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

TCP 서버 프로그램을 통해 송수신이 되는 것을 확인하였는데, 직접 자동차에서 WIFI연결후 통신하면 되질않습니다

데이터를 전혀 못 받아옵니다. 수신 중에 그냥 튕깁니다.

BufferedReader, DataInputStream, Scanner 다해봐도 모르겠습니다.

혹시 OBD 사용해보시거나 WIFI 소켓 사용해보신분 도움 부탁드립니다.

익명사용자 님이 2014년 9월 13일 질문

1개의 답변

0 추천
동일 ip 대역인지 확인해보세요
aucd29 (218,390 포인트) 님이 2014년 9월 15일 답변
...