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

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

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

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

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

1.gif效果如下

2.activity_main.xml如下所示:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingBottom="@dimen/activity_vertical_margin"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 tools:context=".MainActivity" >
 <EditText
  android:id="@+id/et_text"
  android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
  android:hint="请填入要发送的内容"
  />
  <Button
  android:id="@+id/btn_send"
  android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentRight="true"
   android:layout_below="@+id/et_text"
  android:text="发送"
  />
  <TextView
   android:id="@+id/tv_recv"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_below="@+id/btn_send"
   android:minLines="20"
   android:hint="接收的内容"
   />
</RelativeLayout>

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客户端支持读写操作,希望对大家有所帮助!

(0)

相关推荐

  • 详解Android 基于TCP和UDP协议的Socket通信

    本来想讲一下基础的网络通信方面的知识点,发现太枯燥乏味了,不过笔试中也经常会问到这方面的问题,所以关于通信方面的知识点,小编会放到面试中去,因为实战中也就面试会用到这方面知识点 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据. 而Socket通信中基于TCP/IP协议的通信则是在双方建立起连接后就可以直接进行数

  • 基于Socket.IO实现Android聊天功能代码示例

    一.简述 Socket.IO是一个完全由JavaScript实现.基于Node.js.支持WebSocket的协议用于实时通信.跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js. 该种官方介绍看起来有点懵逼,简而言之就是:客户端可通过Socket.IO与服务器建立实时通信管道 二.应用 该下就是介绍Socket.IO通信管道的铺设.通信以及销毁工作. 2.1 引入Socket.io包 compile 'io.socket:socket.io-client:0.8.

  • Android使用socket创建简单TCP连接的方法

    本文实例讲述了Android使用socket创建简单TCP连接的方法.分享给大家供大家参考,具体如下: 不管是在Java还是Android编程中,通信都是及其重要的一部分.有连接的socket编程,重要性自然毋庸置疑. 这里以一个简单的demo演示一个最基本的socket编程. 先写服务端.服务端是Java代码.笔者懒得装eclipse等编程软件,就是直接notepad编程,dos运行的.服务端一般是新建一个绑定端口的serversocket,监听客户端请求(死循环监听).当接收到客户端消息时,

  • android Socket实现简单聊天小程序

    android Socket实现简单聊天小程序,供大家参考,具体内容如下 服务器端: package org.hwq.echo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public cla

  • 详解OkSocket与Android的简单使用

    一个Android轻量级Socket通讯框架,既OkHttp后又一力作. 框架开源地址: https://github.com/xuuhaoo/OkSocket,欢迎star,fork,Issue交流 OkSocket简介 Android OkSocket是一款基于阻塞式传统Socket的一款Socket客户端整体解决方案.您可以使用它进行简单的基于Tcp协议的Socket通讯,当然,也可以进行大数据量复杂的Socket通讯, 支持单工,双工通讯. Maven配置 OkSocket 目前仅支持

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

    本篇我们便来学习如何通过socket读写TCP. 需要注意的是socket必须写在子线程中,不能在ui主线程中直接使用,所以我们这里创建了两个class: MainActivity(主界面).TcpThread(获取socket接收的数据) 由于代码有注释了,所以就不解释了. 1.gif效果如下 2.activity_main.xml如下所示: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android

  • Android实现TCP客户端接收数据的方法

    本文实例讲述了Android实现TCP客户端接收数据的方法.分享给大家供大家参考,具体如下: 配合log4net使用,用来接收调试信息.因此,此客户端只管通过TCP接收字符串数据,然后显示在界面上. 接收TCP数据 try { Socket s = new Socket("192.168.1.5", 8240); InputStream inputStream = s.getInputStream(); DataInputStream input = new DataInputStre

  • Android端TCP长连接的性能优化教程分享

    前言 大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,下面话不多说了,来一起看看详细的介绍吧. 推送长连接 可以说大部分APP是离不开推送(push)这个功能的,不过平常我们都是接入第三方SDK(极光.个推等)居多,因为要做一个推送服务,不光客户端要编写相应的Socket通信代码,服务器端更是麻烦,要处理大规模的长连接服务,消息

  • Android编程实现TCP客户端的方法

    本文实例讲述了Android编程实现TCP客户端的方法.分享给大家供大家参考,具体如下: 因为项目上需要实现一个TCP Client 端:在网上找好多例子基本上都是阻塞方式完成: 我的实现例子:由Activity 及sever 来实现,在sever 创建一个线程来监听接受数据.收到数据,通过广播发送给Activity; 服务端我没有去实现,你可以下载TCP Socket 调试工具v2.2:创建个9005端口:客户端:访问的IP为10.0.2.2 AnetTest.java: /** * Copy

  • Android编程之文件读写操作与技巧总结【经典收藏】

    本文实例总结了Android文件读写操作.分享给大家供大家参考,具体如下: 在Android中的文件放在不同位置,它们的读取方式也有一些不同. 本文对android中对资源文件的读取.数据区文件的读取.SD卡文件的读取及RandomAccessFile的方式和方法进行了整理.供参考. 一.资源文件的读取: 1) 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResources

  • Android编程之在SD卡上进行文件读写操作实例详解

    本文实例讲述了Android编程之在SD卡上进行文件读写操作的方法.分享给大家供大家参考,具体如下: 很多知识只有真正理解掌握之后才能运用自如,举一反三.对Java中的文件操作和android系统SD卡里面的文件操作,你觉得有区别吗,显然没有本质区别,如果勉强说有,那也是不足为道滴,但我们在实际运用中却要注意如下几点,不然问题会缠上你. 1.首先想要对android系统SD卡里文件操作需要添加使用权限: android系统是不会让外来程序随意动自己内存的,如果没有许可证,不好意思,不准你动我地盘

  • Android基于TCP和URL协议的网络编程示例【附demo源码下载】

    本文实例讲述了Android基于TCP和URL协议的网络编程.分享给大家供大家参考,具体如下: 手机本身是作为手机终端使用的,因此它的计算能力,存储能力都是有限的.它的主要优势是携带方便,可以随时打开,而且手机通常总是处于联网状态.因此网络支持对于手机应用非常重要. Android完全支持JDK本身的TCP,UDP网络通信API,也可以使用ServerSocket,Socket来建立基于TCP/IP协议的网络通信,也可以使用DatagramSocket,Datagrampacket来建立基于UD

  • Android仿网易客户端顶部导航栏效果

    最近刚写了一个网易客户端首页导航条的动画效果,现在分享出来给大家学习学习.我说一下这个效果的核心原理.下面是效果图: 首先是布局,这个布局是我从网易客户端反编译后弄来的.大家看后应该明白,布局文件如下: <FrameLayout android:id="@id/column_navi" android:layout_width="fill_parent" android:layout_height="wrap_content" androi

  • Android申请相机权限和读写权限实例

    开发一个相机应用,需要申请三个权限:相机.读文件.写文件. 1.在AndroidManifest.xml中添加 <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name

  • C#使用StreamReader和StreamWriter类读写操作文件

    StreamReader 类 (System.IO) | Microsoft 官方文档 StreamWriter 类 (System.IO) | Microsoft 官方文档 一.文本读写类: TextReader/TextWriter:文本读写,抽象类 1.TextReader文本读,其派生类: StreamReader:以一种特定的编码从字节流中读取字符. StringReader:从字符串读取. 2.TextWriter文本写,其派生类: StreamWriter:以一种特定的编码向流中写

随机推荐