博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Socket开发
阅读量:2066 次
发布时间:2019-04-29

本文共 6981 字,大约阅读时间需要 23 分钟。

突然想到将用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端调试

你可能感兴趣的文章
Prometheus 存储层的演进
查看>>
Kubernetes 边缘节点抓不到监控指标?试试这个方法!
查看>>
不对全文内容进行索引的 Loki 到底优秀在哪里
查看>>
太强大了!这些 Go 的难点问题都能解决!
查看>>
万字长文:K8s 创建 pod 时,背后到底发生了什么?
查看>>
后云原生时代,Kubernetes:你看我还有机会吗?
查看>>
Wintun:一款惊艳的 WireGuard 虚拟网卡接口驱动
查看>>
个人学习方法分享
查看>>
时隔多年。。终于有一款云原生消息系统出仕了!
查看>>
[译]数据包在 Kubernetes 中的一生(1)
查看>>
[译]数据包在 Kubernetes 中的一生(2)
查看>>
[译]数据包在 Kubernetes 中的一生(3)
查看>>
从源头解决 Service Mesh 问题最彻底!
查看>>
一次“不负责任”的 K8s 网络故障排查经验分享
查看>>
一次有趣的 Docker 网络问题排查经历
查看>>
KubeSphere Meetup 北京站火热报名中 | 搭载 CIC 2021 云计算峰会
查看>>
深入理解 Linux Cgroup 系列(一):基本概念
查看>>
深入理解 Linux Cgroup 系列(二):玩转 CPU
查看>>
云原生周报第 1 期 | 2019-06-24~2019-06-28
查看>>
Kubernetes Pod 驱逐详解
查看>>