由于项目需要,弄一个安卓程序,可以实现发送指令控制打印机,使用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;
}
}
}