javasocket字节数组(socket发送byte数组)

本篇文章给大家谈谈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,如何能够保证在服务端和客户端之间的数据能够使得两端都能理解,这就是所谓的“应用协议“。

在通信的“管道”中,流的都是二进制数据,所以,双方如何约定好“解析规则”,则就必须要求通信双方都预先制定好协议。

javasocket字节数组(socket发送byte数组)

java如何用socket接受和发送数组

这个是个伪命题,socket可以发送数组,但只能是byte数组,所有的String,或者别的什么都必须转换为byte数组才可能发送。

所以如果你是byte数组,直接send就可以了。 如果你是别的,不管是不是数组,都必须通过转换的方式变成byte数组。转换常见的方式有两种,字符串的话 getByte()就可以了。其他类型需要转换成字符串再getByte,或者进行序列化操作。

关于javasocket字节数组和socket发送byte数组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年4月2日 08:57:55
下一篇 2024年4月2日 09:04:04

相关推荐

  • c语言自定义函数数组求和,c语言自定义函数调用数组

    C语言数组怎样求和, 可以通过循环遍历数组中的每个元素,并进行累加。累加的结果可以保存在变量中,需要注意,要保证变量足够保存累加结果,不会出现溢出。 先获取数组长度,然后用for循环,从数组中获取值进行累加求和。 c语言中,定义数组后可以用sizeof命令获得数组的长度(即可容纳元素个数)。但是通过传递数组名参数到子函数中,以获得数组长度是不可行的,因为在子…

    2024年5月23日
    4500
  • java对数组计算,java数组计算时间复杂度

    Java中数组运算 1、很简单,因为你的数组是局部变量,只在那个声明它的方法里能用,解决办法是: 把它设置为属性; 作为方法的返回值。 2、将它们相加,并将结果存储到result数组中相应的位置。- 最后返回result数组即可。需要注意的是,上面的代码中我们使用了三元运算符 ? : 来判断数组的下标是否越界,如果越界则将值设为0。 3、public sta…

    2024年5月23日
    5200
  • c语言输入数组,C语言输入数组的方法

    如何用c语言从键盘输入10个数存入数组并求和? 1、用C语言编写一段程序,用来输入10个整数保存到数组中,求出这10个整数的和并输出。 2、,数组是相同数据类型的元素的集合。 2,数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 3,数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。 3、void main(){ fl…

    2024年5月23日
    5100
  • java二维数组获得数据,java二维数组用法

    java中怎样用一位数组获得二维数组中某一行的值 利用 for循环遍历数组 即可 for循环是开界的。 Number : Name : A : B : Value;通过读取指定的列名,你可以得到,列名在数组中对应的索引值。 其实多维数组是在一维数组的基础上进行变换的,就拿二维数组来说,它是在一维数组上存储一维数组。 得到一维数组的长度lenth,如果长度为8…

    2024年5月23日
    4500
  • c语言输入参数数组的长度,c语言 数组参数

    C语言中关于数组长度 1、c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)。 2、因为数组中每个元素的类型都是一样的,在内存中所占的字节数都是相同的,所以总的字节数除以一个元素所占的字节数就是数组的长度。 3、C语言数组的长度是预先定义好的,在整个程序中固定不变。操作方法如下:首先,点击进人visual studio,然后新建一个c…

    2024年5月23日
    4900
  • c语言二维数组的指针,c语言二维数组的指针是什么

    C语言中“二维数组行指针”是什么意思 在C语言中,可以通过定义一个行数组指针,使得这个指针与二维数组名具有同样的性质,实现它们之间可以直接赋值。 数组名就是一个指针常量,它代表数组元素在内存相关信息。C语言 是一门通用计算机编程语言,应用广泛。 a即是它的行指针,a+0表示第0行的地址,a+1表示第1行地址…a[row]+col即列指针,列指针经过一次解引用…

    2024年5月23日
    4800
  • java数组增加元素,java 数组 添加元素

    java数组如何循环添加元素 在List中添加元素主要有以下几种方法:点击学习大厂名师精品课add(Objectobj):在列表的末尾添加元素obj。add(intindex,Objectobj):在指定下标index处添加元素obj。 一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。 数组长度固定,插入以后原来的最后一个元素就被挤…

    2024年5月23日
    5300
  • c语言怎么输入数组,c语言怎么输入数组字符串

    如何用c语言从键盘输入10个数存入数组并求和? 1、用C语言编写一段程序,用来输入10个整数保存到数组中,求出这10个整数的和并输出。 2、,数组是相同数据类型的元素的集合。 2,数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。 3,数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。 3、void main(){ fl…

    2024年5月23日
    4000
  • c语言数组联系,c语言数组的问题

    C语言字符数组连接问题 1、str1和str2都是99个字节,如果str1内字符串的长度比较大,连接str2就会出现超出str1长度的可能,也就是溢出。可以把str1的长度定义大一些。 2、C语言中,字符类型char和整数类型在存储数据的格式上是相同的,都是采用补码存储数据。所不同的是,char只有一个字节,而int数据有四个字节。 3、实际上就是实现str…

    2024年5月23日
    4100
  • java发送字节,double几个字节JAVA

    请教一个利用java中socket字节流进行收发时遇到的问题 1、使用Socket经常会遇到这种问题,由于网络原因,read方法每次不一定会读取到全字节,建议使用DataInputStream中的readInt方法,JDK进行了读取整数的封装,可以保证每次都拿到想要的数据。 2、接收方法的问题 如果你发送一个长度11的字符串 而用一个长度为8的数组接收 第一…

    2024年5月23日
    6700

发表回复

登录后才能评论



关注微信