向继电器发送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 ->收快递,不断的去问,有没有送到,有没有送到,. ...
随机推荐
- 【原创】研发应该懂的binlog知识(上)
引言 为什么写这篇文章? 大家当年在学MySQL的时候,为了能够迅速就业,一般是学习一下MySQL的基本语法,差不多就出山找工作了.水平稍微好一点的童鞋呢还会懂一点存储过程的编写,又或者是懂一点索引的 ...
- 多模块后带来的问题解决方法 - OSGI原形(.NET)
目前只做了基础的功能,比如: 各个模块单独的AppDomain容器 Activator激活 导出的服务检查 不过,虽说这样,但目前的这个版本已经能实现模块分离.互相依赖调用等功能了,对模块划分已经有很 ...
- C#中存储数据的集合:数组、集合、泛型、字典
为什么把这4个东西放在一起来说,因为c#中的这4个对象都是用来存储数据的集合……. 首先咱们把这4个对象都声明并实例化一下: //数组 ]; //集合 ArrayList m_AList = new ...
- H5 文字属性的缩写
05-文字属性的缩写 abc我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- HDU - 4027 线段树减枝
这题太坑了...满满的都是坑点 1号坑点:给定左右区间有可能是反的...因为题目上说x,y之间,但是没有说明x,y的大小关系(害我一直RE到怀疑人生) 2号坑点:开根号的和不等于和开根号(还好避开了) ...
- PS打造油画般的风景人像
- [python]解决Windows下安装第三方插件报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0:
系统:win7IDE:pycharm Python版本:2.7 安装第三方插件是报错: 报错原因与编码有关,pip把下载的临时文件存放在了用户临时文件中,这个目录一般是C:\Users\用户名\Ap ...
- javascript重定向页面并用post方法传递消息
javascript中重定向页面得方法很多,同时能传递消息的也不少:但可用post方法传递的我只找到两种: 第一种方法:用document.write在 JavaScript函数中,用document ...
- scrapy之环境安装
scrapy之环境安装 在之前我安装了scrapy,但是在pycharm中却无法使用. 具体情况是: 我的电脑上存在多个python,有python2,python3,anaconda,其中anaco ...
- Eclipse lombok java
Stablehttps://projectlombok.org/features/all Lombok介绍及使用方法 - holten - 博客园http://www.cnblogs.com/holt ...