android使用socket读取c语言发送的数据

shatian 发布于 2014/12/07 19:19
阅读 1K+
收藏 1

关于socket通信的问题,android跟arduino也就是java跟c语言

客户端是android,服务端是c语言,下面是代码,怎么都读不到c发过来的数据,但是下载了别人的代码却可以,求大神讲解一下思路

1.本人的代码(无论如何都读不到数据)

package com.example.androidsocket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    private TextView tv = null;
    private Socket socket = null;
    private BufferedReader br = null;
    private PrintWriter bw = null;
    private Thread mThread = null;
    private String info = "no data";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);

        new Thread() {
            public void run() {
                char[] buffer = new char[256];
                int count = 0;
                try {
                    socket = new Socket("192.168.1.129", 1290);
                    br = new BufferedReader(new InputStreamReader(
                            socket.getInputStream()));
                    bw = new PrintWriter(new OutputStreamWriter(
                            socket.getOutputStream()));
                    bw.print("hello");
                    bw.flush();
                    while((count = br.read(buffer)) != 0){
                        info = getInfo(buffer, count);
                        mHandler.sendEmptyMessage(0);
                    }
                    if (count > 0) {
                        info = getInfo(buffer, count);
                    }
                    bw.print("hello");
                    bw.flush();
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (count > 0) {
                    info = getInfo(buffer, count);
                }
            }
        }.start();
    }

    public void sendCmd(View v) {
        try {
            bw.print("hello");
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private String getInfo(char[] buff, int count) {
        char[] temp = new char[count];
        for (int i = 0; i < count; i++) {
            temp[i] = buff[i];
        }
        return new String(temp);
    }

    Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            tv.append(info);
        }
    };
}

2.别人的代码(点测试按钮后,可以读到数据)

package wifi.rcc;

import wifi.rcc.R;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

import android.widget.EditText;
import android.widget.TextView;

public class WIFIRCCActivity extends Activity {
    private TextView recvText;
    private Context mContext;
    private boolean isConnecting = false;
    private Thread mThreadClient = null;
    private Socket mSocketClient = null;
    static BufferedReader mBufferedReaderClient = null;
    static PrintWriter mPrintWriterClient = null;
    private String recvMessageClient = "";
    private String recvMessageServer = "";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = this;
        recvText = (TextView) findViewById(R.id.RecvText);
        recvText.setMovementMethod(ScrollingMovementMethod.getInstance());

    }

    public void sendCmd(View v) {
        if (isConnecting && mSocketClient != null) {
            try {
                mPrintWriterClient.print("hello");
                mPrintWriterClient.flush();
            } catch (Exception e) {
                Toast.makeText(mContext, "no connect:" + e.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(mContext, "no connect", Toast.LENGTH_SHORT).show();
        }
    }

    public void onConnect(View arg0) {
        // TODO Auto-generated method stub
        if (isConnecting) {
            isConnecting = false;
            try {
                if (mSocketClient != null) {
                    mSocketClient.close();
                    mSocketClient = null;
                    mPrintWriterClient.close();
                    mPrintWriterClient = null;
                    mBufferedReaderClient.close();
                    mBufferedReaderClient = null;
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mThreadClient.interrupt();
            recvText.setText("information:\n");
        } else {
            isConnecting = true;
            mThreadClient = new Thread(mRunnable);
            mThreadClient.start();
        }
        try {
            mPrintWriterClient.print("hello");
            mPrintWriterClient.flush();
        } catch (Exception e) {
            Toast.makeText(mContext, "no connect:" + e.getMessage(),
                    Toast.LENGTH_SHORT).show();
        }
    }

    // 线程:监听服务器发来的消息
    private Runnable mRunnable = new Runnable() {
        public void run() {
            /*try {
                
            } catch (Exception e) {
                recvMessageClient = "connecting IP is error:" + e.toString()
                        + e.getMessage() + "\n";// 消息换行
                Message msg = new Message();
                msg.what = 1;
                mHandler.sendMessage(msg);
                return;
            }*/

            
            while (isConnecting) {
                
                recvMessageClient = "connected to server!\n";
                Message msg = new Message();
                msg.what = 1;
                mHandler.sendMessage(msg);
                char[] buffer = new char[256];
                int count = 0;
                try {
                    mSocketClient = new Socket("192.168.1.129", 1290);
                    mBufferedReaderClient = new BufferedReader(
                            new InputStreamReader(mSocketClient.getInputStream()));
                    mPrintWriterClient = new PrintWriter(
                            mSocketClient.getOutputStream(), true);
                    if ((count = mBufferedReaderClient.read(buffer)) > 0) {
                        recvMessageClient = getInfoBuff(buffer, count) + "\n";// 消息换行
                        msg = new Message();
                        msg.what = 1;
                        mHandler.sendMessage(msg);
                    }
                } catch (Exception e) {
                    recvMessageClient = "Receive Error :" + e.getMessage()
                            + "\n";// 消息换行
                    msg = new Message();
                    msg.what = 1;
                    mHandler.sendMessage(msg);
                }
                try {
                    mPrintWriterClient.print("hello");
                    mPrintWriterClient.flush();
                } catch (Exception e) {
                    Toast.makeText(mContext, "no connect:" + e.getMessage(),
                            Toast.LENGTH_SHORT).show();
                }
                if (isConnecting) {
                    isConnecting = false;
                    try {
                        if (mSocketClient != null) {
                            mSocketClient.close();
                            mSocketClient = null;

                            mPrintWriterClient.close();
                            mPrintWriterClient = null;
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    };

    Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                recvText.append("Server: " + recvMessageServer); // 刷新
            } else if (msg.what == 1) {
                recvText.append("Client: " + recvMessageClient); // 刷新

            }
        }
    };

    private String getInfoBuff(char[] buff, int count) {
        char[] temp = new char[count];
        for (int i = 0; i < count; i++) {
            temp[i] = buff[i];
        }
        return new String(temp);
    }

    public void onDestroy() {
        super.onDestroy();
        

    }
}

加载中
返回顶部
顶部