【Android】socket连接与发送按钮分开

由于项目需要,弄一个安卓程序,可以实现发送指令控制打印机,使用socket编程,由于对安卓不了解,所以简单记录一下完成的一些测试小程序

该程序实现按一下connect,实现连接到server
这里写图片描述
按一下send,实现发送helloWord到server,server端用电脑socket调试工具做测试
这里写图片描述

常识性提醒
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bm.myapplication2018_01_10">
    <!--允许应用程序改变网络状态-->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

    <!--允许应用程序改变WIFI连接状态-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

    <!--允许应用程序访问有关的网络信息-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <!--允许应用程序访问WIFI网卡的网络信息-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

    <!--允许应用程序完全使用网络-->
    <uses-permission android:name="android.permission.INTERNET"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java中定义了两个按钮,第一个按钮实现连接,第二个按钮实现发送,都需要在子线程中进行,可以直接复制使用,建议按Ctrl键+F查看对socket和outputStream的操作

package com.bm.myapplication2018_01_10;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    Button bt1,bt2;
    Socket socket;
    OutputStream outputStream;

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

        initView();
        initEvent();

    }

    private void initView(){
        bt1=findViewById(R.id.id_bt1);
        bt2=findViewById(R.id.id_bt2);
    }

    private void initEvent(){
        bt1.setOnClickListener(this);
        bt2.setOnClickListener(this);

    }

    private void initSocket(){

        //连接socket
        try {
            socket=new Socket("10.3.0.87",9100);
            outputStream=socket.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private void initSendCommand(String command){

        //发送指令
        byte[] command_byte=command.getBytes();
        try {
            outputStream.write(command_byte);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){

            case R.id.id_bt1:
                //连接socket
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        initSocket();
                    }
                }).start();
                break;
            case R.id.id_bt2:
                //发送数据
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        initSendCommand("HelloWorld");
                    }
                }).start();
                break;

            default:
                break;

        }
    }
}

猜你喜欢

转载自blog.csdn.net/bfz_50/article/details/79025413