2023年8月3日发(作者:)

硬件系列(三)--------wifi打印机之使⽤socket打印(⽆sdk)⼀、前⾔在上⼀篇博⽂中介绍了佳博wifi打印机的打印,但是这个是要的是sdk进⾏打印的,如果没有sdk呢?所以,这篇博⽂就介绍⽆sdk wifi打印。⼆、浅析wifi打印机,其实本质还是使⽤⽹络进⾏数据的传输,既然是数据传输,那么就涉及到了数据的读写操作了,在介绍到,搜索wifi打印机是使⽤socket进⾏搜索的,那么能进⾏搜索,⽽且打印是否也能使⽤socket进⾏数据打印呢?具体如何,我们接着往下看。三、使⽤socket进⾏打印/** * @author Freak * @date 2019/8/14. */public class SocketPrint { //定义编码⽅式 private static String encoding = null; private String ip; private Socket sock = null; private int port; /** * 连接超时时间 */ private final static int SOCKET_RECEIVE_TIME_OUT = 2500; /** * 初始化Pos实例 * * @param ip 打印机IP * @param port 打印机端⼝号 * @param encoding 编码 * @throws IOException */ public SocketPrint(String ip, int port, String encoding) { try { = ip; = port; if (sock != null) { closeIOAndSocket(); } else { SocketAddress socketAddress = new InetSocketAddress(ip, port); sock = new Socket(); t(socketAddress, SOCKET_RECEIVE_TIME_OUT); } if (ected()) { //中⽂打印要看设置设置的中⽂格式对应的是哪⼀个,这个佳博wifi打印机是串⼝的,编码是GB2312,如果设置不对就会乱码 String time = e(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(putStream(), encoding)); ("打印测试"); e(); ("----------------------------"); e(); ("收银员:10001"); e(); ("测试时间:" + time); e(); ("----------------------------"); e(); (); (); (); (); LogUtil.e("已打开"); } else { LogUtil.e("没有打开"); } } catch (Exception e) {LogUtil.e(ng());

} } /** * 关闭IO流和Socket * * @throws IOException */ public void closeIOAndSocket() { try { (); } catch (Exception e) { } }}看了上⾯的代码,是不是觉得很简单,没错,就是这么简单就能进⾏打印了,唯⼀需要注意的地⽅是,socket打印的时候,打印中⽂可能会乱码,这个就要看机器的字符编码是什么了,根据需求去设置字符编码就不会乱码。三、调⽤⽅法socket是耗时操作,不能再主线程中进⾏,要开启⼀个线程去打印。private SocketPrint socketPrint;malThreadPoolProxy().execute(new Runnable() { @Override public void run() { socketPrint=new SocketPrint("192.168.1.100",9100,"GB2312"); }});ThreadPoolProxyFactory线程创建可以查看进⾏使⽤。到此,⽆sdk的wifi打印就完成了。

2023年8月3日发(作者:)

硬件系列(三)--------wifi打印机之使⽤socket打印(⽆sdk)⼀、前⾔在上⼀篇博⽂中介绍了佳博wifi打印机的打印,但是这个是要的是sdk进⾏打印的,如果没有sdk呢?所以,这篇博⽂就介绍⽆sdk wifi打印。⼆、浅析wifi打印机,其实本质还是使⽤⽹络进⾏数据的传输,既然是数据传输,那么就涉及到了数据的读写操作了,在介绍到,搜索wifi打印机是使⽤socket进⾏搜索的,那么能进⾏搜索,⽽且打印是否也能使⽤socket进⾏数据打印呢?具体如何,我们接着往下看。三、使⽤socket进⾏打印/** * @author Freak * @date 2019/8/14. */public class SocketPrint { //定义编码⽅式 private static String encoding = null; private String ip; private Socket sock = null; private int port; /** * 连接超时时间 */ private final static int SOCKET_RECEIVE_TIME_OUT = 2500; /** * 初始化Pos实例 * * @param ip 打印机IP * @param port 打印机端⼝号 * @param encoding 编码 * @throws IOException */ public SocketPrint(String ip, int port, String encoding) { try { = ip; = port; if (sock != null) { closeIOAndSocket(); } else { SocketAddress socketAddress = new InetSocketAddress(ip, port); sock = new Socket(); t(socketAddress, SOCKET_RECEIVE_TIME_OUT); } if (ected()) { //中⽂打印要看设置设置的中⽂格式对应的是哪⼀个,这个佳博wifi打印机是串⼝的,编码是GB2312,如果设置不对就会乱码 String time = e(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(putStream(), encoding)); ("打印测试"); e(); ("----------------------------"); e(); ("收银员:10001"); e(); ("测试时间:" + time); e(); ("----------------------------"); e(); (); (); (); (); LogUtil.e("已打开"); } else { LogUtil.e("没有打开"); } } catch (Exception e) {LogUtil.e(ng());

} } /** * 关闭IO流和Socket * * @throws IOException */ public void closeIOAndSocket() { try { (); } catch (Exception e) { } }}看了上⾯的代码,是不是觉得很简单,没错,就是这么简单就能进⾏打印了,唯⼀需要注意的地⽅是,socket打印的时候,打印中⽂可能会乱码,这个就要看机器的字符编码是什么了,根据需求去设置字符编码就不会乱码。三、调⽤⽅法socket是耗时操作,不能再主线程中进⾏,要开启⼀个线程去打印。private SocketPrint socketPrint;malThreadPoolProxy().execute(new Runnable() { @Override public void run() { socketPrint=new SocketPrint("192.168.1.100",9100,"GB2312"); }});ThreadPoolProxyFactory线程创建可以查看进⾏使⽤。到此,⽆sdk的wifi打印就完成了。