热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Android实现TCP客户端支持读写操作

这篇文章主要介绍了Android-实现TCP客户端,支持读写操作,主要是通过socket读写tcp,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

本篇我们便来学习如何通过socket读写TCP.

需要注意的是socket必须写在子线程中,不能在ui主线程中直接使用,所以我们这里创建了两个class:

MainActivity(主界面)、TcpThread(获取socket接收的数据)

由于代码有注释了,所以就不解释了.

1.gif效果如下

2.activity_main.xml如下所示:


 
  

3.MainActivity.java如下所示

package com.example.tcpdemo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
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 MainActivity extends Activity {
 TcpThread mt;
 TextView tv_recv;
 EditText et_text;  //要发送的内容
 Button btn_send;
 //定义一个handler
 public Handler mHandler = new Handler() {
  public void handleMessage(Message msg) {
   //打印服务器端发来的消息
   System.out.println("read:"+msg.obj.toString());
   tv_recv.append(msg.obj.toString()+"\r\n");
  };
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  tv_recv = (TextView)findViewById(R.id.tv_recv);
  et_text = (EditText)findViewById(R.id.et_text);
  mt = new TcpThread();
  mt.setHandler(mHandler); //设置handler
  mt.setIp("10.10.10.104"); //设置服务器地址
  mt.start();     //启动线程
  btn_send = (Button)findViewById(R.id.btn_send);
  btn_send.setOnClickListener(new OnClickListener() {
   //向服务器端发送数据
   public void onClick(View v) {
    if(!mt.write(et_text.getText().toString()))
    {
     Toast.makeText(getApplicationContext(), "发送失败", Toast.LENGTH_SHORT).show();
    }
   }
  });
 }
}

4.TcpThread.java如下所示

package com.example.tcpdemo;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import android.os.Handler;
import android.os.Message;
public class TcpThread extends Thread {
  
  Handler mHandler=null; 
  Socket socket = null;
  String ip = null;
  OutputStream outputStream = null;  //输出流
  InputStream inputStream=null;   //接收流
  //获取另一个线程的Handler
  public void setHandler( Handler handler){
   mHandler = handler;
  }
  //设置服务器IP
  public void setIp(String ip){
   this.ip = ip;
  }
  public void run(){
   try {
     socket = new Socket(ip, 8080);  //访问指定的ip地址:8080
    } catch (UnknownHostException e) { 
     e.printStackTrace();
    } catch (IOException e) { 
     e.printStackTrace();
    }
   
   //获取输出流
   try {
    outputStream = socket.getOutputStream();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } 
   try{
    while (true)   //读取服务器端发送来的数据
    {
     final byte[] buffer = new byte[1024];//创建接收缓冲区
     inputStream = socket.getInputStream();
     final int len = inputStream.read(buffer);//数据读出来,并且返回数据的长度
     if(len>0)
     {
       Message msg = mHandler.obtainMessage(); 
       //设置发送的内容
       msg.obj = new String(buffer,0,len); 
       mHandler.sendMessage(msg); 
     }
    }
   }
   catch (IOException e) {
   }
  }
  //向服务器端写入数据
  public boolean write(String text){
   boolean ret = true;
   try {
    outputStream.write(text.toString().getBytes());
   } catch (IOException e) { 
    ret = false;
    e.printStackTrace();
   }
   return ret;
  }
}

总结

以上所述是小编给大家介绍的Android实现TCP客户端支持读写操作,希望对大家有所帮助!


推荐阅读
  • 本文详细介绍了ejabberd中的验证码服务、接收器以及服务器间通信的监督者和工作进程,包括它们的启动方式和主要功能。 ... [详细]
  • Eclipse 中 Maven 的基础配置指南
    本文详细介绍了如何在 Eclipse 环境中配置 Maven,包括环境变量的设置、Maven 插件的安装与配置等关键步骤,旨在帮助开发者顺利搭建开发环境。 ... [详细]
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
  • C# 对象转 JSON 字符串的方法与应用
    本文介绍如何在 C# 中使用一般处理程序(ASHX)将对象转换为 JSON 字符串,并通过设置响应类型为 application/json 来确保客户端能够正确解析返回的数据。同时,文章还提供了 HTML 页面中不依赖 jQuery 的 AJAX 方法来接收和处理这些 JSON 数据的具体实现。 ... [详细]
  • 目录介绍01.CoordinatorLayout滑动抖动问题描述02.滑动抖动问题分析03.自定义AppBarLayout.Behavior说明04.CoordinatorLayo ... [详细]
  • 深入探讨PHP中的输出缓冲技术(Output Buffering)
    本文深入解析了PHP中输出缓冲(Output Buffering)的原理及其在Web开发中的应用,特别是如何通过输出缓冲技术有效管理HTTP头部信息,提高代码的灵活性与健壮性。 ... [详细]
  • 本文介绍了两种有效的方法来检查Android应用是否拥有特定权限,如媒体读写权限(media_rw)。通过这些方法,开发者和安全人员可以更好地了解应用的行为,确保其不会滥用权限。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 本文介绍了ThinkPHP框架的基本概念及其主要特性。作为一款遵循Apache许可证的开源框架,ThinkPHP不仅支持多种平台和Web服务器,还提供了丰富的功能以适应不同的开发需求。 ... [详细]
  • 使用Solr从MySQL导入数据构建全量索引
    为了更好地掌握Solr的各项功能,本文档将在本地Windows环境中演示如何从MySQL数据库中导入数据至Solr,并构建全量索引。这将有助于开发者熟悉Solr的数据处理流程,尤其是在无法直接在生产服务器上进行实践的情况下。 ... [详细]
  • 在尝试将SpringBoot与MyBatis框架进行集成时,遇到了一个常见的问题:org.apache.ibatis.builder.BuilderException。此错误通常指示XML配置文件中存在语法或结构上的问题。本文将探讨具体原因及解决方案。 ... [详细]
  • 在日常开发中,经常需要通过Web服务进行数据交互。然而,在参数传递时会遇到一些限制,例如自定义实体类和Hashtable等复杂数据类型无法直接传递。本文将详细介绍如何在ASP.NET环境中有效地传递Hashtable数据。 ... [详细]
  • 本文探讨了如何在Android框架下通过自定义资源文件实现系统风格的统一,包括系统资源文件的位置、引用方法、系统主题的设置及修改等内容。 ... [详细]
  • 随着技术的发展,黑客开始利用AI技术在暗网中创建用户的‘数字孪生’,这一现象引起了安全专家的高度关注。 ... [详细]
author-avatar
闲云野鹤-男主角_185
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有