最近的工作还真是忙,所谓是忙里偷闲,为了给大家分享一下如何在同一局域网下,使用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
//这个是服务端的代码
//这个是客户端的代码实现
好了,以上就是一个简单的服务端与客户端交互的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);
}
```
对了,在操作打印机之前还需要执行这么一行代码,那就是复位打印机
private static final byte[] RESET= {0x1b,0x40};