向继电器发送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();
} }
向继电器发送socket请求(python+java)的更多相关文章
- Java发送socket请求的工具
package com.tech.jin.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import ...
- 通过java.net.URLConnection发送HTTP请求的方法
一.前言 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求. Java有原生的API可用于发送HTTP请求,即java.net.URL.java.net.UR ...
- 通过java.net.URLConnection发送HTTP请求(原生、爬虫)
目录 1. 运用原生Java Api发送简单的Get请求.Post请求 2. 简单封装 3. 简单测试 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求.Ja ...
- 【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法(一)
Java原生的API可用于发送HTTP请求 即java.net.URL.java.net.URLConnection,JDK自带的类: 1.通过统一资源定位器(java.net.URL)获取连接器(j ...
- HttpClient服务端发送http请求
本来以为对跨域问题的处理已经比较熟练了.可以通过jsonp.document.domain+iframe.window.name.window.postMessage.服务器上设置代理页面来解决.但还 ...
- [PHP学习教程 - 网络]004.模拟发送HTTP请求[GET/POST](HTTP Simulator)
引言:经常在开发期间,客户端与服务端的调试都是借助于真实的容器返回.尤其是在处理到POST时,通常刚刚入门的兄弟姐妹就一定要借助容器.今天,我们就来处理一下模拟HTTP. 本文列举了常见的四种请求方式 ...
- 【JAVA】通过HttpClient发送HTTP请求的方法
HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...
- JAVA发送HttpClient请求及接收请求结果
1.写一个HttpRequestUtils工具类,包括post请求和get请求 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...
- Python Socket请求网站获取数据
Python Socket请求网站获取数据 ---阻塞 I/O ->收快递,快递如果不到,就干不了其他的活 ---非阻塞I/0 ->收快递,不断的去问,有没有送到,有没有送到,. ...
随机推荐
- [Spark][kafka]kafka 生产者,消费者 互动例子
[Spark][kafka]kafka 生产者,消费者 互动例子 # pwd/usr/local/kafka_2.11-0.10.0.1/bin 创建topic:# ./kafka-topics.sh ...
- JVM总括三-字节码、字节码指令、JIT编译执行
JVM总括三-字节码.字节码指令.JIT编译执行 目录:JVM总括:目录 java文件编译后的class文件,java跨平台的中间层,JVM通过对字节码的解释执行(执行模式,还有JIT编译执行,下面讲 ...
- .NET 框架 Microsoft .NET Framework (更新至.NET Framework4.8)
https://dotnet.microsoft.com/download/dotnet-framework 产品名称 离线安装包 .NET Framework 4.8 点击下载 .NET Frame ...
- IDEA报错Error:Module 'shop-common' production: java.lang.IndexOutOfBoundsException
问题描述: 本来项目是正常的,编译.运行.启动都是OK的,但是在一次电脑重启后,出现了以上这个问题:Error:Module 'shop-common' production: java.lang.I ...
- WEB学习感受
web学习感受 1.html前端知识比较好学,各种标签只需要记住关键的就行例如:body h1,p,div,tr,td,ul,li,就行了. 2.css学习前期还好, 后期关键布局和样式知识点较多,而 ...
- 617. Merge Two Binary Trees(Easy)
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...
- H5 61-浮动元素贴靠现象
61-浮动元素贴靠现象 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...
- 对Vuejs框架原理名词解读
渐进式()+虚拟Dom: vue-cli 遍历Dom:先序遍历DOM树的5种方法! 三层架构+m v c +mvp+m v vm()+MVC,MVP 和 MVVM 的图示 剖析vue MVVM实现原理 ...
- poj2594 机器人寻找宝藏(最小路径覆盖)
题目来源:http://poj.org/problem?id=2594 参考博客:http://www.cnblogs.com/ka200812/archive/2011/07/31/2122641. ...
- An error occurred while updating the entries. See the inner exception for details.
EF插入或更新数据时出现错误提示:An error occurred while updating the entries. See the inner exception for details.的 ...