package com.example.esp8266;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    private EditText edSend, edReceive;
    private Button btnConnect, btnSend;
    private Handler myHandler;
    private SendThread SendThread;
    private boolean isReceive = false;
    private boolean isConnect = false;
    private static final String HOST = "192.168.4.1";
    private static final int PORT = 333;
    String strMessage;
    Socket socket = null;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edSend = (EditText) findViewById(R.id.edSend);
        edReceive = (EditText) findViewById(R.id.edReceive);
        btnConnect = (Button) findViewById(R.id.btConnect);
        btnSend = (Button) findViewById(R.id.btSend);
        // 连接
        btnConnect.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
                // TODO Auto-generated method stub
                if (!isConnect) {
                    new Thread(connectThread).start();
                    isConnect = true;
                }
            }
        });
        // 发送
        btnSend.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
                // 启动发送线程
                new Thread(SendThread).start();
            }
        });
        myHandler = new Handler() {// UI主线程消息处理函数
            
            public void handleMessage(Message msg) {
                Bundle bundle = msg.getData();
                String string = bundle.toString();
                edReceive.setText(string);
            }
        };
    }

// 连接到服务器的接口
    Runnable connectThread = new Runnable() {
        
        public void run() {
            // TODO Auto-generated method stub
            try {
                socket = new Socket(HOST, PORT);
                if (socket != null)
                    Toast.makeText(getApplicationContext(), "连接成功",
                            Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(getApplicationContext(), "连接失败",
                            Toast.LENGTH_LONG).show();
                // 初始化发送线程
                SendThread = new SendThread(socket);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    };
    // 接收消息的接口
    Runnable Receive = new Runnable() {
        InputStream inStream;
        private byte[] buffer;
        private String str = null;

public void run() {
            // TODO Auto-generated method stub
            while (!isReceive) {
                buffer = new byte[512];
                try {
                    inStream = socket.getInputStream();
                    inStream.read(buffer);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                str = new String(buffer);
                Bundle bundle = new Bundle();
                bundle.get(str);
                Message message = new Message();
                message.setData(bundle);
                myHandler.sendMessage(message);
            }
        }
    };

// 发送线程
    private class SendThread extends Thread {
        private OutputStream outStream = null;

private String str = null;

SendThread(Socket socket) {
            try {
                outStream = socket.getOutputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        public void run() {
            // while(true){
            str = edSend.getText().toString().trim();
            PrintStream pt = new PrintStream(outStream);
            pt.print(str);
            new Thread(Receive).start();
            // }
        }
    }

protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        if (Receive != null) {
            isReceive = false;
            ((Thread) Receive).interrupt();
        }
    }

}

Android连接服务器端的Socket的更多相关文章

  1. Android连接热点的Socket文件传输

    最近把测试丢过来的种种BUG解决后,终于有时间去研究研究Socket通信,再加上以前做的WiFi连接和热点开启,于是有了现在的这篇博文:创建热点发送文件,让另一台手机连接热点接收文件. 效果图: 两台 ...

  2. Android连接socket服务器上传下载多个文件

    android连接socket服务器上传下载多个文件1.socket服务端SocketServer.java public class SocketServer { ;// 端口号,必须与客户端一致 ...

  3. Android学习六:Socket 使用

    1socket的作用 通过http去获取服务器的数据在有些情况下是行不通的,所有使用socket与服务器通信也是必须掌握的 2.代码 好了上代码,代码中有解释,首先是简单的服务端代码 package ...

  4. android开发系列之socket编程

    上周在项目遇到一个接口需求就是通讯系列必须是socket,所以在这篇博客里面我想谈谈自己在socket编程的时候遇到的一些问题. 其实在android里面实现一个socket通讯是非常简单的,我们只需 ...

  5. 基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET

    基于libevent, libuv和android Looper不断演进socket编程 - 走向架构师之路 - 博客频道 - CSDN.NET 基于libevent, libuv和android L ...

  6. 轮询、长轮询、长连接、flash socket 的区别

    轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 优点:后端程序编写比较容易. 缺点:请求中有大半是无用,浪费带宽和服务器资源. 实例:适于小型应用. 长轮询:客 ...

  7. android连接打印机

    android连接  网络打印,主要使用socket连接设备,发送指令给设备. 首先要有设备的IP,端口号一般默认的是9100 //打印设备网络IP etIp.setText("192.16 ...

  8. tcp连接是基于socket通信的吗

    https://zhidao.baidu.com/question/1305788160020716299.html ------ 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字 ...

  9. android 连接蓝牙打印机 BluetoothAdapter

    android 连接蓝牙打印机 BluetoothAdapter 源码下载地址:https://github.com/yylxy/BluetoothText.git public class Prin ...

随机推荐

  1. 为何存在requests库,pycharm依然报错解决方法 --转载

    原文地址:https://www.jianshu.com/p/e28a72ba7809 今天在使用pycharm的时候,用到了第三档库requests,提示有错误,报错显示 No module nam ...

  2. 生成器的认识及其思考:VAE, GAN, Flow-based Invertible Model

    生成器对应于认知器的逆过程. 这一切的起源都是当初一个极具启发性的思想:Sleep-wake algorithm——人睡眠时整理记忆做梦,是一个生成的过程,即通过最终的识别结果企图恢复接收到的刺激,当 ...

  3. VS2015+VisualSVN+TortoiseSVN安装及使用

    1. SVN 是什么 SVN 是 Apache Subversion 的缩写,是一个开放源代码的版本控制系.这些数据放置在一个中央资料档案库(repository) 中. 这个档案库很像一个普通的文件 ...

  4. 从码农到技术总监分享Leader经验

    从一个毕业的IT小伙或者一个码农成长为一个管理者,有很多需要转变的思想,那么当你遇到了瓶颈,或许我的经验能帮到你,感谢. 系统的掌握了.NET,JAVA技术,能够熟练的使用springcloud + ...

  5. Java 开发笔记

    共同学习,以下内容,随时更新. 前端 1.前端页面'是单引号的转义符,"是双引号.  问题(前端JS进行参数传递时,使用的是单引号扩住变量,但是变量形式为 2019-27  ...

  6. js promise中如何取到[[PromiseValue]]

    返回的值Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: "http://dl.stream.qqmus ...

  7. oracle存储过程出现ORA-01403: 未找到数据 问题解决方法

    这段时间在做一个业务,需要用到存储过程处理业务逻辑,但是出现一个ORA-01403: 未找到数据 问题, 那么这个应该如何解决这个问题 declare mixType integer; begin - ...

  8. 小白的python之路10/30磁盘分区

    总结:fdisk   mkfs  mount 1.磁盘分区 硬盘分区有三种,主磁盘分区.扩展磁盘分区.逻辑分区. 一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个.且主分区+扩展分区总共 ...

  9. 小白的python之路10/29 文件归档

    一打包解包文件 [root@localhost ~]# cd /test/[root@localhost test]# touch a.txt b.txt c.txt[root@localhost t ...

  10. Python-接口自动化(五)

    python基础知识(五) (六)类与对象 类:某一类具有共同属性和特性的事物或者说是一个抽象的描述,比如说大佬类,你就是大佬类里面具体的一个实例.类一般包含属性和方法 (1)类的语法: class ...