android中的TCP通信

时间:2015-03-08 18:21:59

标签: android networking logging tcp tcpclient

我正在尝试与Android手机沟通Arduino UNO,我想要的是

http://www.arduino.cc/en/Main/arduinoBoardUno

1)android设备将字符串发布到arduino

2)arduino将整数发布到android

到目前为止,我可以发布来自Android的消息,在Arduino主板上收到,但我无法发布一个整数到android,没有在android收到

Arduino代码(可以接收字符“a”,“b”,“c”,“d”,对于案例“z”,我想发送回来的距离是一个int):

void loop()
{ 
  distance = Dist.getDistanceCentimeter();
  if(distance<=5 & distance>1)
  {
    back();
    delay(100);
    ting();
    distance=0;
  } 
  if(Serial.available())
  {
    lkf = Serial.read();
  switch(lkf)
  {
  case 'a':
     front();
     servoX.write(90);
     lkf=0;  
     break;   
   case 'b':
     back();
     lkf=0;
     break;     
   case 'c':
     left();
     lkf=0;
     break;
   case 'd':
     right();
     lkf=0;
     break; 
  case 'z':
    Serial.write(distance);
    break; 
    }
  }
 }

Android代码:

在主要活动中

@Override
protected TCPClient doInBackground(String... message) {

    //create TCPClient object 
    mTcpClient = new TCPClient(new TCPClient.OnMessageReceived() {
        @Override
        //check whether server return message
        public void messageReceived(String message) {
            f_sensor.setText(message);
            Log.d("test1","msg rece" + message);
            //publishProgress(message);
        }
    });
    mTcpClient.run();

    return null;
}

TCP Cilent

public class TCPClient {

    private String serverMessage;
    public static final String SERVERIP = "192.168.8.1"; //your computer IP address
    public static final int SERVERPORT = 2001;
    private OnMessageReceived mMessageListener = null;
    private boolean mRun = false;

    PrintWriter out;
    BufferedReader in;

    /**
     *  Constructor of the class. OnMessagedReceived listens for the messages received from server
     */
    public TCPClient(OnMessageReceived listener) {
        mMessageListener = listener;
    }

    /**
     * Sends the message entered by client to the server
     * @param message text entered by client
     */
    public void sendMessage(String message){
        if (out != null && !out.checkError()) {
            out.println(message);
            out.flush();
        }
    }

    public void stopClient(){
        mRun = false;
    }

    public void run() {

        mRun = true;

        try {
            //here you must put your computer's IP address.
            InetAddress serverAddr = InetAddress.getByName(SERVERIP);

            Log.e("TCP Client", "C: Connecting...");

            //create a socket to make the connection with the server
            Socket socket = new Socket(serverAddr, SERVERPORT);

            try {

                //send the message to the server
                out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

                Log.e("TCP Client", "C: Sent.");

                Log.e("TCP Client", "C: Done.");

                //receive the message which the server sends back
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

                //in this while the client listens for the messages sent by the server
                while (mRun) {
                    serverMessage = in.readLine();

                    if (serverMessage != null && mMessageListener != null) {
                        //call the method messageReceived from MyActivity class
                        mMessageListener.messageReceived(serverMessage);
                    }
                    serverMessage = null;

                }

                Log.d("test1",serverMessage);
                Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");

            } catch (Exception e) {

                Log.e("TCP", "S: Error", e);

            } finally {
                //the socket must be closed. It is not possible to reconnect to this socket
                // after it is closed, which means a new socket instance has to be created.
                socket.close();
            }

        } catch (Exception e) {

            Log.e("TCP", "C: Error", e);

        }

    }

    //Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity
    //class at on asynckTask doInBackground
    public interface OnMessageReceived {
        public void messageReceived(String message);
    }
}

感谢您的帮助

注意:我发现了关于董事会的一些事实,是否有任何提示?

整数的二进制表示在Arduino(16位)和Android(32)位之间变化,虽然Arduino和大多数本机级Android实现都是little-endian,但Android java代码是big-endian。

0 个答案:

没有答案