硬件系列(三)--------wifi打印机之使用socket打印(无sdk)

一、前言

在上一篇博文 硬件系列(二)-------------wifi打印机之佳博wifi打印机踩坑之路中介绍了佳博wifi打印机的打印,但是这个是要的是sdk进行打印的,如果没有sdk呢?所以,这篇博文就介绍无sdk  wifi打印。

二、浅析

wifi打印机,其实本质还是使用网络进行数据的传输,既然是数据传输,那么就涉及到了数据的读写操作了,在硬件系列(一)----------WIFI打印机之使用socket进行打印机搜索介绍到,搜索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 {
            this.ip = ip;
            this.port = port;
            if (sock != null) {
                closeIOAndSocket();
            } else {
                SocketAddress socketAddress = new InetSocketAddress(ip, port);
                sock = new Socket();
                sock.connect(socketAddress, SOCKET_RECEIVE_TIME_OUT);
            }
            if (sock.isConnected()) {
                //中文打印要看设置设置的中文格式对应的是哪一个,这个佳博wifi打印机是串口的,编码是GB2312,如果设置不对就会乱码
                String time = DateUtil.getTime();
                BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(), encoding));
                bufferedWriter.write("打印测试");
                bufferedWriter.newLine();
                bufferedWriter.write("----------------------------");
                bufferedWriter.newLine();
                bufferedWriter.write("收银员:10001");
                bufferedWriter.newLine();
                bufferedWriter.write("测试时间:" + time);
                bufferedWriter.newLine();
                bufferedWriter.write("----------------------------");
                bufferedWriter.newLine();
                bufferedWriter.flush();
                bufferedWriter.close();
                sock.close();
                LogUtil.e("已打开");
            } else {
                LogUtil.e("没有打开");
            }
        } catch (Exception e) {
LogUtil.e(e.toString());
           
        }
    }

    /**
     * 关闭IO流和Socket
     *
     * @throws IOException
     */
    public void closeIOAndSocket() {
        try {
            sock.close();
        } catch (Exception e) {

        }
    }
}

看了上面的代码,是不是觉得很简单,没错,就是这么简单就能进行打印了,唯一需要注意的地方是,socket打印的时候,打印中文可能会乱码,这个就要看机器的字符编码是什么了,根据需求去设置字符编码就不会乱码。

三、调用方法

socket是耗时操作,不能再主线程中进行,要开启一个线程去打印。
private SocketPrint socketPrint;
ThreadPoolProxyFactory.getNormalThreadPoolProxy().execute(new Runnable() {
    @Override
    public void run() {
        socketPrint=new SocketPrint("192.168.1.100",9100,"GB2312");
    }
});

ThreadPoolProxyFactory线程创建可以查看使用线程池工厂创建线程进行使用。

到此,无sdk的wifi打印就完成了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值