android共享局域网打印,Android 浅谈同一局域网下使用WiFi连接打印机

Android 浅谈同一局域网下使用WiFi连接打印机

原创_Duke 发布于2017-03-29 16:46:47 阅读数 9218  收藏

展开

Android 浅谈同一局域网下使用WiFi连接打印机

最近的工作还真是忙,所谓是忙里偷闲,为了给大家分享一下如何在同一局域网下,使用WiFi去连接打印机,

刚接到这样的任务时,脑子并没有那么乱,自己的思路还是很清晰的,也许是因为之前做过WiFi的原因吧,然后

就拿着打印机布置好一些相关信息,跟着就各种代码实现,把WiFi的关闭,开关,获取到的列表等等一系列功能

实现了一遍,但是吐血的事情就发生了,原来产品需求并没有要求那么复杂,只是很简单的一个要求,直接输入

ip地址和端口号,然后可以连接成功就完事了。这里告诫我们,在开发的时候,最好就先了解清楚产品需求,

以免做无用功,接下来就进入到代码实现环节啦。

1.同一局域网下使用WiFi连接打印机,可以实现打印出文本,可以想一下,用什么方法去实现呢?

socket通信,没错,相信这个是最好的通信工具了,那什么是socket呢,它的好处有哪些,这里就简单和大家分享一下socket的通信机制原理,所谓socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

下面是一个很简单的服务端与前端的通信demo

//这个是服务端的代码

new Thread(new Runnable() {

@Override

public void run() {

try {

//这里的9999端口号要与客户端的端口号一致

ServerSocket ss = new ServerSocket(9999);

Log.d(TAG, "启动服务器....");

Socket s = ss.accept();

Log.d(TAG, "客户端:" +s.getInetAddress().getLocalHost() + "已连接到服务器");

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(s.getInputStream()));

//读取客户端发送来的消息

String mess = bufferedReader.readLine();

Log.d(TAG, "客户端:" + mess);

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

bw.write(mess + "\n");

bw.flush();

} catch (IOException e) {

Log.d(TAG, "service IOException:" + e);

}

}

}).start();

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//这个是客户端的代码实现

new Thread(new Runnable() {

@Override

public void run() {

try {

Looper.prepare();

//这里直接输入ip地址和端口号

Socket socket = new Socket("127.0.0.1", 9999);

//当前已经连接成功,并且是处于活跃状态

if (socket.isConnected() && socket.getKeepAlive()) {

//获取服务端的输入流,这里可用可不用,主要看产品

InputStream inputStream = socket.getInputStream();

//获取服务端的输出流,这个就一定要取到,因为这个关系到能不能向服务端发送出消息的操作

OutputStream os = socket.getOutputStream();

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));

//向服务器端发送一条消息,在打印机里面,\n的动作是必要的,如果没有\n的动作,打印机是不会打印出任何东西的

bw.write("测试客户端和服务器通信,服务器接收到消息返回到客户端\n");

bw.flush();

//读取服务器返回的消息

BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

String mess = br.readLine();

Log.d(TAG, "服务器:" + mess);

} else {

Log.d(TAG, "client 连接失败");

}

} catch (IOException e) {

Log.d(TAG, "client IOException:" + e);

}

}

}).start();

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

好了,以上就是一个简单的服务端与客户端交互的demo,足够细心的童鞋会发现,我在客户端的代码里面有简单说过打印操作的东西,

其实和打印机交互是个很简单的东西,不需要去想的那么复杂,只需要把打印机当作是服务端,APP作为客户端,那么我们实现与打印机交互的原理也就实现了,

1.首先创建一个Socket

Socket socket =new Socket(“127.0.0.1”,9999);,只需要实现这行代码就好了,因为会自动帮你做连接动作,

2 然后判断是否建立通信了

if(socket.isConnected() && socket.getKeepAlive()){ }

3 连接成功后,就需要获取到输出流 OutputStream outputStream = socket.getOutputStream();

4 直接使用输出流将你想要打印的文本打印出来就可以了

try{

byte[] data = text.getBytes("GB2312");

outputStream.write(data,0, data.length);

outputStream.flush();

}catch(IOException e) {

Log.e("printText "+ e);

}

1

2

3

4

5

6

7

对了,在操作打印机之前还需要执行这么一行代码,那就是复位打印机

private static final byte[] RESET= {0x1b,0x40};

————————————————

版权声明:本文为CSDN博主「_Duke」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u010795244/article/details/68066780

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值