做个笔记

  /**
* 发送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消息到指定服务并接收响应的更多相关文章

  1. 使用Java客户端发送消息和消费的应用

    体验链接:https://developer.aliyun.com/adc/scenario/fb1b72ee956a4068a95228066c3a40d6 实验简介 本教程将Demo演示使用jav ...

  2. 客户端 new socket时候 就像服务端发起连接了

    客户端 new socket时候  就像服务端发起连接了

  3. [转]C服务端与java客户端的socket通信注意事项

    http://blog.csdn.net/gaoxin1076/article/details/7671752 Socket网络通讯开发总结之:Java 与 C进行Socket通讯 注意以下问题: 1 ...

  4. C#(服务器)与Java(客户端)通过Socket传递对象(序列化 json)

    下面详细讲解实现的关键步骤:          通信关键: C#和java用Socket通信,发送数据和接收数据可以统一采用UTF-8编码,经过测试,使用UTF-8编码可以成功传递对象. 对于Sock ...

  5. 【.NET+MQTT】.NET6 环境下实现MQTT通信,以及服务端、客户端的双边消息订阅与发布的代码演示

    前言: MQTT广泛应用于工业物联网.智能家居.各类智能制造或各类自动化场景等.MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,在很多受限的环境下,比如说机器与机器通信.机器与物联网通信等. ...

  6. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...

  7. 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)

    NIO主要原理及使用 NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接.读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候, ...

  8. Java学习笔记--Socket和ServerSocket

    参考资料: http://haohaoxuexi.iteye.com/blog/1979837http://zhidao.baidu.com/link?url=OeOSa0YbOzSbMVPa8sgP ...

  9. 三、Mosquitto Java 客户端实现

    本文的实现是在 << 一.Mosquitto 介绍&安装>> << 二. Mosquitto 的使用说明 >> 两篇文章搭建好 Mosquitt ...

  10. java 网络编程Socket

    TCP: 通过TCP协议传输,得到的是一个顺序的无差错的数据流. 发送方和接收方的成对的两个socket之间必须建立连接, 以便在TCP协议的基础上进行通信,当一个socket(通常都是server ...

随机推荐

  1. linux服务问题传文件连不上问题远程问题等

    通过iptables相关命令实现防火墙的打开和关闭 1.首先可以在打开的终端使用iptables --help查看帮助使用命令: 2.查看防火墙状态:service iptables status(此 ...

  2. 安卓线性布局LinearLayout

    1.weight权重解读 用法归纳: 按比例划分水平方向:将涉及到的View的android:width属性设置为0dp,然后设置为android weight属性设置比例即可. ` <Line ...

  3. 写于vue3.0发布前夕的helloworld之二

    接着,继续走,来到了vm.$mount. 开始生成render函数,生成VNode,由于是第一次加载,所以patch机制为只删除前一个dom节点机制,下面都会讲到. 先到$mount: Vue.pro ...

  4. 使用Win32控制台实现libevent通信

    libevent版本:libevent-2.0.22-stable 服务端: #include <string.h> #include <errno.h> #include & ...

  5. Windows 提权-密码搜寻

    本文通过 Google 翻译 Password Hunting – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释 ...

  6. Hyperledger Fabric - 自定义network.sh脚本

    引言:依据hyperledger fabric提供的测试网络脚本搭建自己的网络环境 该系列参考:https://blog.csdn.net/ling1998?type=blog 执行./network ...

  7. Codeforces Round 970 (Div. 3)

    A. Sakurako's Exam 分类讨论即可,当a为奇数,无法消去1,或者a==0且b为奇数时,无法消去2 #include <bits/stdc++.h> using namesp ...

  8. SpringSecurity5(14-Gateway整合)

    MVC 与 WebFlux 关系 SpringSecurity 设置要采用响应式配置,基于 WebFlux 中 WebFilter 实现,与 Spring MVC 的 Security 是通过 Ser ...

  9. Ubuntu v22.0安装zabbix --1

    检查Nginx状态 sudo systemctl status nginx 检查Zabbix Server状态 sudo systemctl status zabbix-server Nginx配置: ...

  10. LVGL基础对象的框架、思维与概念,以及部分源码解析

    概念: Lvgl虽然是以C语言进行编程开发,但其中借鉴了CSS当中编程思想,引入了类与对象的概念,其中lvgl的基础单位为控件,等同于HTML5当中的标签. Lvgl当中的"类"是 ...