비쥬얼 베이직 기반의 서버를 사용하는 로봇과 통신을 하는 안드로이드 어플을 만드려 합니다.
스토어에서 받은 간단한 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);
}
}
}
}