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 ...
随机推荐
- IOS 内付 asp.net mvc 服务器端验证
上代码: public class AppStorePayApp { public int VerifyReceipt(string receipt, out string product_id, o ...
- class com.ttsx.activity.item.dao.entity.RoleMenu ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method. 报错解决办法
启动项目的时候,有几条WARN警告,如图: 引起原因: 是因为数据表实体类 没有di导致的. 例如: 解决办法: 增加实体id字段!或可以忽略!不影响程序!
- 因为Apifox不支持离线,我果断选择了Apipost!
要说国内最有名的两款API开发工具不是Apipost就是Apifox,因为曾经遭遇到一件事,导致我坚定的选择了Apipost. 有一年春节我攒了足够的年假,提前开开心心的过年回家,路上我的领导给我打电 ...
- python初学习一
#1.切片操作 左闭右开 s='Hello word' print(s[0:5]) #2.更新字符串 s1='hello word' s2='python' print(s1[0:6]+s2) #3. ...
- 【python-数据分析】pandas数据提取
import pandas as pd 1. 直接索引 df = pd.DataFrame({'AdmissionDate': ['2021-01-25','2021-01-22','2021-01- ...
- Netty源码—10.Netty工具之时间轮
大纲 1.什么是时间轮 2.HashedWheelTimer是什么 3.HashedWheelTimer的使用 4.HashedWheelTimer的运行流程 5.HashedWheelTimer的核 ...
- 新装的 MySQL 不允许远程连接
新装的 MySQL 通常会出现这样的情况:无法远程连接,但是本地连接是正常的. 问题原因 新装的 MySQL 通常默认的用户是 root, 而为了安全起见, root 用户是不允许远程连接. mysq ...
- study Python3 【1】
用VSCode来编辑Python代码,作为IDE使用,有点头晕. https://www.runoob.com/python3/python-vscode-setup.html有介绍.还有更好的博客介 ...
- unity prefab
1.修改prefab原始资源某组件为enabled或disabled,实例如果起初和原始资源是一样的状态那么修改原始资源会作用到实例上,如果发现不一样那么原始资源的修改不会作用到实例上,而且以后都不会 ...
- CSP - J理论(1)
CSP-J理论(1) CSP-J理论合集跳转 目录 本目录中所有标题单击均可以快速跳转哦 一.排列组合与概率 $\ \ \ \ \ $1.排列 $\ \ \ \ \ $2.组合 $\ \ \ \ \ ...