向继电器发送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 ->收快递,不断的去问,有没有送到,有没有送到,. ...
随机推荐
- redis底层设计(一)——内部数据结构
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Ubuntu脚本修改IP信息
#!/bin/bash cd /etc/network #清除4-9行 sed -i '4,9d' interfaces #在第3行添加网卡名称 sed -i "3a auto ${1}&q ...
- IntentService解析
IntentService中内置了一个HandlerThread,能够对数据进行处理.相比于普通的Service,IntentService有以下优点: 1. 不用在Service创建线程. 2. 不 ...
- Chrome 谷歌浏览器清除HTTPS证书缓存
在地址栏输入 chrome://net-internals/#hsts 找到下图中的输入框,输入对于的域名执行删除就行了
- Linux Namespace : 简介
在初步的了解 docker 后,笔者期望通过理解 docker 背后的技术原理来深入的学习和使用 docker,接下来的几篇文章简单的介绍下 linux namespace 的概念以及基本用法. na ...
- flask登录插件 flask-login
Flask-Login为Flask提供了用户会话管理,它处理了日常的登入登出且长时间记住用户的会话 使用: 1.配置,初始化 LoginManager 创建实例 loginManger = Login ...
- python第六章:三大利器(装饰器,迭代器,生成器)--小白博客
python装饰器 什么是装饰器?在不修改源代码和调用方式的基础上给其增加新的功能,多个装饰器可以装饰在同一个函数上 # 原理(个人理解):将原函数(bar)的内存地址重新赋值,进行覆盖.新值为装饰器 ...
- matplotlib 入门之The Lifecycle of a plot
文章目录 Note 数据 准备开始 操控风格 我错了!!! 定制图像 特别注意!!! figsize=(width, height)!!! 格式化标签 组合多个可视化对象? 保存你的图片 matplo ...
- iOS 快速集成ijkplayer视频直播与录播框架
最近由于需求的变动,项目内把最初最简单的原生直播框架变成了B站开源的ijkplayer框架,下面把具体的过程总结一下整个过程都比较简单,重要的是理解的过程,集成完毕之后,视频的用户体验比苹果原生好了很 ...
- 合并dll文件
在使用VS进行.Net编程时,出现了一个奇怪的现象. 在一个类库项目中导入了dll库A后,再导入A的两个依赖项(dll库)B和C,执行“生成”操作时,出现错误信息,提示B和C的库版本与A所需的不一致. ...