前言
一个超市里常用的条码秤对接经历
屏幕截图.png
tcp/ip
该条码秤使用 tcp/ip 协议进行通信,在 java 中,tcp/ip 通信被封装成了 Socket 类,所以使用起来还算简单。
以下是一个简单的 socket 示例
try {
socket = new Socket();
InetSocketAddress socketAddress = new InetSocketAddress("192.168.3.150", 4001);
socket.connect(socketAddress, 10 * 1000);
socket.setSoTimeout(5 * 1000);
if (socket.isConnected()) {
// 向 socket 服务器写入数据
byte[] bytes = {0x21, 0x30, 0x49, 0x41, 0x0d, 0x0a, 0x03};
socket.getOutputStream().write(bytes);
// 接收 socket 服务器返回的数据
InputStreamReader ipr = new InputStreamReader(socket.getInputStream());
bufferedReader = new BufferedReader(ipr);
String str = bufferedReader.readLine();
}
} catch (IOException error) {
error.printStackTrace();
}
复制代码
建议先实例化 socket 再进行连接,因为这样可以通过 setSoTimeout 函数设置超时时间,避免线程阻塞,同时 socket 的连接不能在主线程中进行,否则会报错。
发送数据到条码秤
大华条码秤 socket 服务器的端口为 4001,需要给大华秤盘设置一个固定的 ip 地址。
设置方式如下:
按下功能键 -> 输入9002 -> 按下确认 -> 开始输入 ip 地址,输入 . 需要按下去皮键 -> 在输入主机地址后按下去皮键完成设置
在大华的文档中标明,每个指令都得以 0x0d, 0x0a, 0x03 为结束符,所以可以封装一个函数,如下:
private String sendCommand(byte[] bytes) {
byte[] suffix = {0x0d, 0x0a, 0x03};
try {
if (socket != null && socket.isConnected() && socket.getOutputStream() !=