本篇文章给大家谈谈javasocket字节数组,以及socket发送byte数组对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、使用Java 1用socket程序发送和接收字节数组 2用十六进制的形式显示每个字节里面的内容2、java中的socket通信,怎么发送一个byte[]数组?3、java socket发送数据的类型4、java如何用socket接受和发送数组
使用Java 1用socket程序发送和接收字节数组 2用十六进制的形式显示每个字节里面的内容
我们定义发送者和接收者,发送者作为客户端,接收者作为服务端。
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();
}
}
运行,首先启动服务端:
然后启动客户端:
查看接收结果:
java中的socket通信,怎么发送一个byte[]数组?
socket发送的是流,所以必须将byte[]转换成流的形式,之后才可以发送的。创建socket后可以通过下面的方法实现发送:
PrintWriter pw = null;
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); //创建一个输入流,之后这个流的指向是socket
pw.write(request.toString()); //写入要输入的Byte[],转换为字符串,之后进行传送
pw.close();//传送完毕,关闭流
java socket发送数据的类型
在Socket通信中,要在客户端和服务端中传输数据,传输的数据有各种类型包括:int,short,long以及String,甚至是自定义的各种Object,如何能够保证在服务端和客户端之间的数据能够使得两端都能理解,这就是所谓的“应用协议“。
在通信的“管道”中,流的都是二进制数据,所以,双方如何约定好“解析规则”,则就必须要求通信双方都预先制定好协议。
java如何用socket接受和发送数组
这个是个伪命题,socket可以发送数组,但只能是byte数组,所有的String,或者别的什么都必须转换为byte数组才可能发送。
所以如果你是byte数组,直接send就可以了。 如果你是别的,不管是不是数组,都必须通过转换的方式变成byte数组。转换常见的方式有两种,字符串的话 getByte()就可以了。其他类型需要转换成字符串再getByte,或者进行序列化操作。
关于javasocket字节数组和socket发送byte数组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。