Android Socket开发

突然想到将用windows的程序控制Android程序,就像到了使用socket编程。

下面是android端的程序

 

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.ServerSocket;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

       private Socket clientSocket = null;
       private ServerSocket mServerSocket = null;
       private Handler mHandler = null;

       private AcceptThread mAcceptThread = null;
       private ReceiveThread mReceiveThread = null;
       private boolean stop = true;

       private TextView ipText;
       private TextView rcvText;
       private TextView ConnectStatusText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ipText = (TextView)findViewById(R.id.textView1);
        rcvText = (TextView)findViewById(R.id.textView3);
        ConnectStatusText = (TextView)findViewById(R.id.textView4);

         ConnectStatusText.setText("连接状态: 未连接");

                 // 消息处理
         mHandler = new Handler()
                 {
                         @Override
                         public void handleMessage(Message msg)
                         {
                                 switch(msg.what)
                                 {
                                         case 0:
                                             {
                                                 String strAddress = (msg.obj).toString();
                                                 ipText.setText("IP地址: " + strAddress);
                                                 Log.v("Leo: IP: ", strAddress);
                                                 ConnectStatusText.setText("连接状态: 已连接");
                                                 // 显示客户端IP
                                                 // ipTextView.setText((msg.obj).toString());
                                                 // 使能发送按钮
                                                 // sendButton.setEnabled(true);
                                                 break;
                                             }
                                         case 1:
                                             {
                                                 String strRcv = (msg.obj).toString();
                                                 rcvText.setText("接收到数据: " + strRcv);
                                                 Log.v("Leo: Rcv: ", strRcv);
                                                 // 显示接收到的数据
                                                 // mTextView.setText((msg.obj).toString());
                                                 break;
                                             }
                                     }

                             }
                     };

        mAcceptThread = new AcceptThread();
                  // 开启监听线程
                  mAcceptThread.start();
         }

              // 显示Toast函数
             private void displayToast(String s)
            {
                 Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
            }

           private class AcceptThread extends Thread
           {
                 @Override
                  public void run()
                  {
                          try {
                                  // 实例化ServerSocket对象并设置端口号为 12589
                                  mServerSocket = new ServerSocket(12598);
                             } catch (IOException e) {
                                 // TODO Auto-generated catch block
                                  e.printStackTrace();
                              Log.d("abc", "run: "+e.getMessage());
                              }

                          try {
                                  // 等待客户端的连接(阻塞)
                                  clientSocket = mServerSocket.accept();
                             } catch (IOException e) {
                                  // TODO Auto-generated catch block
                                 e.printStackTrace();
                              Log.d("abc", "run: "+e.getMessage());
                              }

                         mReceiveThread = new ReceiveThread(clientSocket);
                          stop = false;
                          // 开启接收线程
                         mReceiveThread.start();

                         Message msg = new Message();
                          msg.what = 0;
                         // 获取客户端IP
                          msg.obj = clientSocket.getInetAddress().getHostAddress();
                          // 发送消息
                          mHandler.sendMessage(msg);
                      }
             }

                private class ReceiveThread extends Thread
                {
                private InputStream mInputStream = null;
                 private byte[] buf;
                 private String str = null;

                 ReceiveThread(Socket s)
                {
                          try {
                                 // 获得输入流
                                  this.mInputStream = s.getInputStream();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                  e.printStackTrace();
                              }
                 }

                 @Override
                 public void run()
                  {
                          while(!stop)
                             {
                                 this.buf = new byte[512];

                                 // 读取输入的数据(阻塞读)
                                 try {
                                          this.mInputStream.read(buf);
                                      } catch (IOException e1) {
                                         // TODO Auto-generated catch block
                                          e1.printStackTrace();
                                      }

                                  // 字符编码转换
                                  try {
                                         this.str = new String(this.buf, "GB2312").trim();
                                      } catch (UnsupportedEncodingException e) {
                                          // TODO Auto-generated catch block
                                          e.printStackTrace();
                                     }

                                  Message msg = new Message();
                                 msg.what = 1;
                                 msg.obj = this.str;
                                 // 发送消息
                                 mHandler.sendMessage(msg);
                              }
                      }
             }

}                                                                        

下图是pc端调试






猜你喜欢

转载自blog.csdn.net/easyboot/article/details/80984552