向继电器发送socket请求(python+java)

近日,有一需求,向连接在内网的继电器发送socket请求,加以控制。原本并不复杂,只是io流/socket转换的问题,实操中却出现python代码没问题,java代码执行无响应的问题,问题很好定位:没有发送正确的请求指令。进而确定是编码的问题,python预设全局编码格式为utf-8,java端只需指定请求字节码为utf-8即可。

python实现:

#! /usr/bin/env python
# -*- coding:utf- -*-
# __author__ = "NYA" import socket soc = socket.socket(socket.AF_INET,socket.SOCK_STREAM) address=('172.18.20.188',) soc.connect(address) message="on1"
message="off1"
message="read1" #res=soc.recv()
#print res
soc.send(message) total=[]
i=
while True:
res=soc.recv()
if i>:
total.append(res)
i+=
if str(res)=='': break #print res
then=''.join(total)
print then
soc.close()

java实现:

import java.io.*;
import java.net.Socket;
import java.util.regex.Pattern; public class TestSocket { public static void main(String[] args) { /*
* command:
* on1 off1 read1
* on2 off2 read2
* */ try { BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); boolean flag = true; while (flag) { System.out.println("输入信息: ");
String str = input.readLine(); if ("bye".equals(str)) {
flag = false;
} else {
String s = sendCommand(str);
System.out.println(s);
}
}
input.close();
System.err.println("good bye");
} catch (Exception e) {
e.printStackTrace();
} } public static String sendCommand(String command) {
String result;
String ip = "172.18.20.188";
int port = 5000;
Socket socket = null;
try {
socket = new Socket(ip,port); socket.setSoTimeout(1000); // read 超时 OutputStream outputStream = socket.getOutputStream();
byte[] receive = new byte[1]; byte[] bytes = command.getBytes("UTF-8"); // 转码 ××× outputStream.write(bytes); InputStream inputStream = socket.getInputStream();
StringBuilder sb = new StringBuilder();
int i = 0 ;
while (true) {
inputStream.read(receive);
String now = new String(receive);
if (i > 8) sb.append(now);
if (i > 10) {
if (isInteger(now)) break;
}
i++;
}
result = sb.toString();
} catch (Exception e) {
//e.printStackTrace();
result="err";
} // 释放socket连接
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
} return result;
} public static boolean isInteger(String str) {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
} }
上一篇:HttpClient 上传多个文件


下一篇:ServiceStack.OrmLite中的一些"陷阱"(1)