请教用socket如何向服务器端发送16进制数据

如题所述

我们定义发送者和接收者,发送者作为客户端,接收者作为服务端。
Sender.java

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Arrays;

public class Sender {

public static void main(String[] args) throws Exception {
// 127.0.0.1 代表本机地址,在 8888 端口上监听
Sender sender = new Sender("127.0.0.1", 8888);
byte[] bytes = {15, 16, 17, 120}; // 对应的十六进制是 0F 10 11 78
sender.send(bytes);
System.out.println("发送" + Arrays.toString(bytes) + "完毕!");
}

private final String host;
private final int port;

public Sender(String host, int port) {
this.host = host;
this.port = port;
}

private void send(byte[] bytes) throws IOException {
Socket socket = new Socket(host, port); // 建立和服务端的 socket

try (DataOutputStream dos // 建立输出流
= new DataOutputStream(socket.getOutputStream())) {
dos.write(bytes, 0, bytes.length); // 向输出流写入 bytes
}
}
}


Receiver.java


import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Receiver {

public static void main(String[] args) throws Exception {
Receiver receiver = new Receiver(8888);
receiver.receive();
}

private final ServerSocket serverSocket;

public Receiver(int port) throws IOException {
serverSocket = new ServerSocket(port);
}

private void receive() throws IOException {
System.out.println("等待客户端连接...");
Socket socket = serverSocket.accept();
try (DataInputStream dis = new DataInputStream(socket.getInputStream())) {
byte[] bytes = new byte[1024]; // 假设发送的字节数不超过 1024 个
int size = dis.read(bytes); // size 是读取到的字节数

String hex = bytesToHex(bytes, 0, size);
System.out.println("接收到的byte数组的十六进制:" + hex);
}
}

/**
 * 将 byte 数组转化为十六进制字符串
 *
 * @param bytes byte[] 数组
 * @param begin 起始位置
 * @param end 结束位置
 * @return byte 数组的十六进制字符串表示
 */
private String bytesToHex(byte[] bytes, int begin, int end) {
StringBuilder hexBuilder = new StringBuilder(2 * (end - begin));
for (int i = begin; i < end; i++) {
hexBuilder.append(Character.forDigit((bytes[i] & 0xF0) >> 4, 16)); // 转化高四位
hexBuilder.append(Character.forDigit((bytes[i] & 0x0F), 16)); // 转化低四位
hexBuilder.append(' '); // 加一个空格将每个字节分隔开
}
return hexBuilder.toString().toUpperCase();
}

}


运行,首先启动服务端:

然后启动客户端:

查看接收结果:

温馨提示:内容为网友见解,仅供参考
第1个回答  2021-01-06

与大多数socket软件传输字符不同,我这是flutter利用socket进行16进制数据传输.网上针对这样的应用一个也没有.我也是边研究边学习,虽然功能上不太完善,但是程序框架功能没有问题.希望喜欢flutter和dart的朋友关注.

请教用socket如何向服务器端发送16进制数据
Sender.javaimport java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.util.Arrays;public class Sender {public static void main(String[] args) throws Exception {\/\/ 127.0.0.1 代表本机地址,在 8888 端口上监听Sender sender = new Sender("127.0.0....

用socket怎么向服务器端发送16进制数据
getOutputStream(),从连接获取输入流对象。 这个对象可以和BufferedOutputStream,OutputStreamWriter等配合使用; 建立BufferedOutputStream对象 BufferedOutputStream br=new BufferedOutputStream(socket.getOutputStream()); 调用BufferedOu...

java中使用socket编程 发送16进制数据,应该如何实现??
\/\/Socket s=new Socket(xxxx参数); OutputStream os=s.getOutputStream();os.write("7e 00 0e 90 00 12 4b 00 01 f6 96 0f 00 00 02 01 18 5b".getBytes());os.flush();

...TCP socket通信,如何实现发送十六进制值,并在数据接收窗口中显示这些...
import java.net.*;public class Client{ static byte num=1;private int portNum;public Client(int portnum){ this.portNum=portnum;System.out.println("您是第"+num+"位客服端");num++;} public void sentMessage(String me){ \/\/都是向服务器发信息端口号1999 try{ DatagramSocket ds=new...

请教socket发送16进制数据
BYTE buffer[] = { 0x23, 0x1A, 0x00, 0x00, 0x00, 0xCC, 0xC4, 0x14, 0x00, 0x0A, 0x40, 0xC5, 0x00, 0xD9, 0xE4, 0x22, 0x33, 0x1F, 0x98, 0x7C};发送这个 buffer send( SOCKET, buffer, sizeof(buffer), 0);

vb socket发送十六进制字节数组怎么发?
winsock senddata发送的是字符串 16进制数据转成字符串型直接发送 想显示16进制数据或其他按数据规则解析即可

如何将接收到的数据转为16进制
第一串口要打开,第二向这个打开的串口发送数据 你完全可以在 intinputlen = MSComm1.InBufferCount 此句下一个断点(将光标移动到此句前面 然后按F9) 当程序运行是 看是否停留在此句代码 看接收事件是否工作

Delphi程序,利用ServerSocket 如何接受16进制数据
srvrsckt1.Socket.Connections[i].SendBuf(buf,len)srvrsckt1.Socket.Connections[i].ReceiveBuf(buf,len);buf即为一byte数组 len代表长度。

请问通过netty或者socket怎么接收16进制的字节码?
socket接收的本来就是byte数组,直接处理byte数组就好。一般原始的socket代码都是用byte的。只有外界一些简化的代码,才会直接把byte数组转换成字符再处理。不过唯一的问题是,你这样没有tcp头的数据。容易发生tcp拆包。

flutter进行tcp socket通讯数据收发
flutter采用tcp\/ip的socket通讯,进行16进制数据收发。flutter制作的客户端通过连接服务器的地址和端口进行数据交互。如果运用到嵌入式调试过程中真是非常不错的。

相似回答