为了尽量简单化,PC端使用调试工具做server,收到手机端发过来的数据效果如下
为了避免常识性错误,所以一般我先写权限,在AndroidManifest.xml中添加如下权限
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bm.printer0105">
<!--允许应用程序改变网络状态-->
<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,相关解释应该都在注释里了,主要步骤就是
1、获取socket(连接),2、获取stream,3、整理要发送的string,4、发送
最麻烦的应该是第三个步骤,后期如果有业务逻辑需要的话大部分工作都是要花在处理字符串,这里就简单发送一个字符串
package com.bm.printer0105;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
private Socket socket;
private OutputStream outputStream;
private String download;
private byte[] download_head;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开启一个线程用于执行耗时操作,这个是自己写的方法,方便辨认
initThread();
}
private void initThread(){
new Thread(new Runnable() {
@Override
public void run() {
//该线程执行了获取套接字(已连接),获取输出流,制作字符串,发送四个方法
initSocket("10.3.0.87",9100);//此处写服务端的IP和端口,可以在PC端上看自己的IP是多少,
//如果用别的工具看不了IP,可以使用cmd,输入ipconfig查看
initStream();
initString();
initSend();
}
}).start();
}
private void initSocket(final String host, final int port){
//该方法用于获取套接字和执行连接操作,
//只要服务端打开了一般都能连上,注意ip和端口正确即可
// (还有,有的地方网络环境比较复杂,如果发送不成功,也可以试试用手机热点当AP,记得改IP)
try {
socket=new Socket(host,port);//这一步就已经连接上了,
//与C的区别就是不用建立family,也不用指定连接选型,直接一步到位很方便
} catch (IOException e) {
e.printStackTrace();
Log.e("获取socket",e.toString());
}
}
private void initStream(){
try {
outputStream=socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
Log.e("获取流",e.toString());
}
}
private void initString(){
download = "TEST BM IT IoT";
download_head = download.getBytes();//要转换成字节数组,也就是byte[],才允许发送
}
private void initSend(){
try {
outputStream.write(download_head);//发送方法就是调用输出流的write,此时数据将会发送到server端
} catch (IOException e) {
e.printStackTrace();
Log.e("发送数据给服务端(输出流)",e.toString());
}
}
}
源码下载:
http://download.csdn.net/download/bfz_50/10196200
其实可以直接复制代码的