java客户端发送socket消息到指定服务并接收响应
做个笔记
/**
* 发送socket到指定服务
* 接收有6位报文头长度的响应,支持读取分包
*
* @param host IP
* @param port 端口
* @param msg 消息内容,自己加报文头长度哦
* @return
* @throws Exception
*/
public static String send(String host, String port, String msg) throws Exception {
System.out.println("socket发送,host=" + host + ",port=" + port + ",msg=" + msg);
try (Socket socket = new Socket(host, Integer.parseInt(port));) {
OutputStream os = socket.getOutputStream();
os.write(msg.getBytes());
System.out.println("=======已成功发送=======");
InputStream is = socket.getInputStream();
StringBuilder ret = new StringBuilder();
//这里每次读的长度可以自己改
byte[] bys = new byte[1024];
int len = 0;
//6代表长度头的长度
byte[] headBytes = new byte[6];
int headRead = is.read(headBytes);
String head = new String(headBytes, 0, headRead, StandardCharsets.UTF_8);
ret.append(head);
System.out.println("head=" + head);
int headLength = Integer.parseInt(head);
int current = 0;
while (true) {
len = is.read(bys);
current = current + len;
if (len == 0) {
continue;
}
if (len == -1) {
break;
}
String str = new String(bys, 0, len, StandardCharsets.UTF_8);
ret.append(str);
if (current == headLength) {
break;
}
}
//输出数据
System.out.println("socket接收,host=" + host + ",port=" + port + ",msg=" + ret.toString());
//释放资源
socket.close();
return ret.toString();
} catch (IOException e) {
e.printStackTrace();
throw new Exception("发送失败");
}
}
java客户端发送socket消息到指定服务并接收响应的更多相关文章
- 使用Java客户端发送消息和消费的应用
体验链接:https://developer.aliyun.com/adc/scenario/fb1b72ee956a4068a95228066c3a40d6 实验简介 本教程将Demo演示使用jav ...
- 客户端 new socket时候 就像服务端发起连接了
客户端 new socket时候 就像服务端发起连接了
- [转]C服务端与java客户端的socket通信注意事项
http://blog.csdn.net/gaoxin1076/article/details/7671752 Socket网络通讯开发总结之:Java 与 C进行Socket通讯 注意以下问题: 1 ...
- C#(服务器)与Java(客户端)通过Socket传递对象(序列化 json)
下面详细讲解实现的关键步骤: 通信关键: C#和java用Socket通信,发送数据和接收数据可以统一采用UTF-8编码,经过测试,使用UTF-8编码可以成功传递对象. 对于Sock ...
- 【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示
前言: MQTT广泛应用于工业物联网.智能家居.各类智能制造或各类自动化场景等.MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信.机器与物联网通信等. ...
- java httpclient发送json 请求 ,go服务端接收
/***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...
- 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)
NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...
- Java学习笔记--Socket和ServerSocket
参考资料: http://haohaoxuexi.iteye.com/blog/1979837http://zhidao.baidu.com/link?url=OeOSa0YbOzSbMVPa8sgP ...
- 三、Mosquitto Java 客户端实现
本文的实现是在 << 一.Mosquitto 介绍&安装>> << 二. Mosquitto 的使用说明 >> 两篇文章搭建好 Mosquitt ...
- java 网络编程Socket
TCP: 通过TCP协议传输,得到的是一个顺序的无差错的数据流. 发送方和接收方的成对的两个socket之间必须建立连接, 以便在TCP协议的基础上进行通信,当一个socket(通常都是server ...
随机推荐
- . net core 项目创建和发布
1.发布和部署到IIS https://www.cnblogs.com/loverwangshan/p/11284169.html https://www.cnblogs.com/wangjiegua ...
- 形态学图像处理(Morphological Image Processing)
形态学图像处理(Morphological Image Processing) 前言 本博客为个人总结数字图像处理一课所写,并给出适当的扩展和相应的demo. 写博客跟做 checkpoint ...
- k8s dial tcp 127.0.0.1:6443: connect: connection refused排查流程及解决思路
前言 k8s 集群中,使用 kubelet 报错,如下: The connection to the server 127.0.0.1:6443 was refused - did you speci ...
- mongodb 查看、创建、修改、删除索引
简介 索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录. 这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询 ...
- go 简单封装数学运算包
前言 我们在编写程序时,经常会遇到一些高精度的数学运算,这时候使用简单的运算符会造成精度的缺失. 这里引用了这个第三方包 https://github.com/shopspring/decimal 做 ...
- mysql CONFLICT 冲突
1.IGNORE 当使用INSERT语句向表中添加一些行数据并且在处理期间发生错误时,INSERT语句将被中止,并返回错误消息.因此,可能不会向表中没有插入任何行.但是,如果使用INSERT INGO ...
- 数据库MVCC详解
MVCC 1.基本介绍 数据库:MySQL.[很多主流数据库都使用了MVCC,比如MySQL的InnoDB引擎.PostgreSQL.Oracle] MVCC,全称Multi-Version Conc ...
- 【虚拟机】在VMware中为Ubuntu虚拟机设置共享文件夹
[虚拟机]在VMware中为Ubuntu虚拟机设置共享文件夹 零.需求 有些开发工具在Windows上没有,只能在Ubuntu上开发,但是自己电脑是Windows的,开发完成后需要通过Windows分 ...
- 【UWB】DWM1000 室内定位串口协议说明
UWB室内定位串口协议说明 通过串口发送的测距报告消息有三种: "mr"信息包括标签到锚定原始范围 "mc"标签到锚定范围偏差修正范围 - 用于标签位置 &qu ...
- 【DXP】如何在原理图中批量修改
零.问题 想要修改所有电阻的封装,怎么解决? 一.解决 以修改所有电阻封装为例,可举一反三. 在电阻上右键,选择"查找相似对象". 注意在右键的时候鼠标应该是放在元器件图标上的,而 ...