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

간단한 안드로이드 tcp/ip 통신에 대해 질문합니다.

0 추천

비쥬얼 베이직 기반의 서버를 사용하는 로봇과 통신을 하는 안드로이드 어플을 만드려 합니다. 

 

스토어에서 받은 간단한 tcp/ip통신 어플을 받아 연결 해서 명령어를 보내면 서버에서 받아 로봇이 동작합니다. 

 

비슷하게 만들면 되나 싶어서 간단한 tcp/ip 메세지 전송 어플을 만들어 연결 해보니 연결은 되나 명령어 전송이 먹히지 않았습니다.

 

그래서 스토어에서 받은 어플을 분해해 보니 바이트? 로 전송하는것 같고 인터넷에서 소스를 긁어 만든 어플은 스트링으로 보내게 해놧더군요.. 

 

그래서 똑같은 형식으로 하면 되나 싶어 다시 해보는데.. 보내지지가 않네요 ...

        			byte[] arrayOfBite=str.getBytes();
        			out.write(arrayOfBite);
        			out.flush();
        			return;

이부분에 문제가 있나요? 아니면 어디에 문제가 있는거죠;;..?

 

혹시 몰라 소스 전부 첨부합니다. 

 

package com.example.tcptcp;

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;



public class TCPTCP extends Activity {
	
	private String return_msg;
    private static final String serverIP= "192.168.10.7";
    private static final int serverPort = 5559;
    private Socket socket;
    private BufferedOutputStream out = null;
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
        
        EditText et = (EditText)findViewById(R.id.editText1);
        EditText et2 = (EditText)findViewById(R.id.editText2);

        Button btn = (Button)findViewById(R.id.button1);
        Button ctlButton2 = (Button)findViewById(R.id.button2);
        Button ctlButton3 = (Button)findViewById(R.id.button3);
        final TextView tv = (TextView)findViewById(R.id.textView1);
        

        btn.setOnClickListener(new OnClickListener(){
         public void onClick(View v){
             try {    
            	 
                 InetAddress serverAddr = InetAddress.getByName(serverIP);        
                 socket = new Socket(serverAddr, serverPort);
                 tv.setText("접속성공");
                Toast.makeText(getApplicationContext(), "접속성공", Toast.LENGTH_LONG).show();
             	} catch (Exception e) {
                 Log.e("TCP", "C: Error2", e);
                 tv.setText("접속실패");
                 Toast.makeText(getApplicationContext(), "접속실패", Toast.LENGTH_LONG).show();
             	} 
         }
        });
 

        ctlButton2.setOnClickListener(new OnClickListener()
        {
            public void onClick(View v)
            {
            	
            
            	//String message = "power,1";
                EditText message_box = (EditText) findViewById(R.id.editText3);
            	String str;
            	str = message_box.getText().toString()+"\r";
                message_box.setText("");
            	//EditText message_box;
            	//message_box = (EditText) findViewById(R.id.editText3);
            	
        		try
        		{
        			byte[] arrayOfBite=str.getBytes();
        			out.write(arrayOfBite);
        		    out.flush();
        			return;
        			
        		   //PrintWriter out = new PrintWriter(new BufferedWriter(
        		   //new OutputStreamWriter(socket.getOutputStream())), true);
        		  // out.println(message);
        		  // out.println(message_box.getText().toString());
        		}
        		catch (Exception e)
        		{

        		} 
            }

         });  
        
        
        ctlButton3.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
            	
            	try
            	{
            		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            		if(in != null)
            		{
            			return_msg = in.readLine();
            			tv.setText(return_msg);
            		}
            	} catch(Exception e)
            	{
            		tv.setText("Error");
            	}
            }
           });         
    }//End OnCreate

    private class TCPclient implements Runnable
    {
            private String msg;

            public TCPclient(String _msg){
             this.msg = _msg;
            }
            @Override
            public void run() 
            {
            	try 
            	{
            		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    return_msg = in.readLine();

            	} catch(Exception e)
            	{
                           Log.e("TCP", "C: Error1", e);
                }
            }
            
    	}    

}

serans (150 포인트) 님이 2014년 9월 11일 질문

2개의 답변

0 추천

네트워크 연결은 메인스레드에서 하면 안됩니다

alkyne (22,960 포인트) 님이 2014년 9월 12일 답변
0 추천
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class Client extends Activity {

 private Socket socket;

 private static final int SERVERPORT = 5000;
 private static final String SERVER_IP = "10.0.2.2";

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);  

  new Thread(new ClientThread()).start();
 }

 public void onClick(View view) {
  try {
   EditText et = (EditText) findViewById(R.id.EditText01);
   String str = et.getText().toString();
   PrintWriter out = new PrintWriter(new BufferedWriter(
     new OutputStreamWriter(socket.getOutputStream())),
     true);
   out.println(str); // 전송할 메시지
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 class ClientThread implements Runnable {

  @Override
  public void run() {

   try {
    InetAddress serverAddr = InetAddress.getByName(SERVER_IP);

    socket = new Socket(serverAddr, SERVERPORT);
                                //접속성공 메시지 출력
   } catch (UnknownHostException e1) {
                               //접속실패 메시지1
    e1.printStackTrace();
   } catch (IOException e1) {
                               //접속실패 메시지2
    e1.printStackTrace();
   }

  }

 }
}

 

 

doridori2013@nate.com

익명사용자 님이 2014년 9월 12일 답변
...