导航:首页 > 编程语言 > pythonsocket接收16进制

pythonsocket接收16进制

发布时间:2022-08-17 13:52:22

‘壹’ python socket recv 到的一个数据包中有 print repr出来有16进的有正常的字符串

struct包里面有pack和unpack,字符串之间可以用+连接起来。

‘贰’ 请问通过netty或者socket怎么接收16进制的字节码

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

‘叁’ 求教各位大仙socket如何发送16进制数据

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


importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.Socket;
importjava.util.Arrays;

publicclassSender{

publicstaticvoidmain(String[]args)throwsException{
//127.0.0.1代表本机地址,在8888端口上监听
Sendersender=newSender("127.0.0.1",8888);
byte[]bytes={15,16,17,120};//对应的十六进制是0F101178
sender.send(bytes);
System.out.println("发送"+Arrays.toString(bytes)+"完毕!");
}

privatefinalStringhost;
privatefinalintport;

publicSender(Stringhost,intport){
this.host=host;
this.port=port;
}

privatevoidsend(byte[]bytes)throwsIOException{
Socketsocket=newSocket(host,port);//建立和服务端的socket

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


Receiver.java

importjava.io.DataInputStream;
importjava.io.IOException;
importjava.net.ServerSocket;
importjava.net.Socket;

publicclassReceiver{

publicstaticvoidmain(String[]args)throwsException{
Receiverreceiver=newReceiver(8888);
receiver.receive();
}

;

publicReceiver(intport)throwsIOException{
serverSocket=newServerSocket(port);
}

privatevoidreceive()throwsIOException{
System.out.println("等待客户端连接...");
Socketsocket=serverSocket.accept();
try(DataInputStreamdis=newDataInputStream(socket.getInputStream())){
byte[]bytes=newbyte[1024];//假设发送的字节数不超过1024个
intsize=dis.read(bytes);//size是读取到的字节数

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

/**
*将byte数组转化为十六进制字符串
*
*@parambytesbyte[]数组
*@parambegin起始位置
*@paramend结束位置
*@returnbyte数组的十六进制字符串表示
*/
privateStringbytesToHex(byte[]bytes,intbegin,intend){
StringBuilderhexBuilder=newStringBuilder(2*(end-begin));
for(inti=begin;i<end;i++){
hexBuilder.append(Character.forDigit((bytes[i]&0xF0)>>4,16));//转化高四位
hexBuilder.append(Character.forDigit((bytes[i]&0x0F),16));//转化低四位
hexBuilder.append('');//加一个空格将每个字节分隔开
}
returnhexBuilder.toString().toUpperCase();
}

}


运行,首先启动服务端:然后启动客户端:查看接收结果:

‘肆’ java的socket通信如何直接接收16进制数据

发送消息之前转码为16进制
Java code
public static final String encodeHex(String msg) {
byte[] bytes = null;
try {
bytes = msg.getBytes("GBK");
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
StringBuffer buff = new StringBuffer(bytes.length * 4);
String b;
char a;
int n = 0;
int m = 0;
for (int i = 0; i < bytes.length; i++) {
b = Integer.toHexString(bytes[i]);
if (bytes[i] > 0) {
buff.append("00");
buff.append(b);
n = n + 1;
} else {
a = msg.charAt((i - n) / 2 + n);
m = a;
b = Integer.toHexString(m);
buff.append(b.substring(0, 4));
i = i + 1;
}
}
return buff.toString();
}

‘伍’ python中想要把字母或数字转为16进制\x30格式并且输出,但是最终显示却还是字母是怎么回事呢

给你一个函数试试。
def str_to_hex(s):
return ' '.join([hex(ord(c)).replace('0x', '') for c in s])

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

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


importjava.io.DataOutputStream;
importjava.io.IOException;
importjava.net.Socket;
importjava.util.Arrays;

publicclassSender{

publicstaticvoidmain(String[]args)throwsException{
//127.0.0.1代表本机地址,在8888端口上监听
Sendersender=newSender("127.0.0.1",8888);
byte[]bytes={15,16,17,120};//对应的十六进制是0F101178
sender.send(bytes);
System.out.println("发送"+Arrays.toString(bytes)+"完毕!");
}

privatefinalStringhost;
privatefinalintport;

publicSender(Stringhost,intport){
this.host=host;
this.port=port;
}

privatevoidsend(byte[]bytes)throwsIOException{
Socketsocket=newSocket(host,port);//建立和服务端的socket

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

Receiver.java


importjava.io.DataInputStream;
importjava.io.IOException;
importjava.net.ServerSocket;
importjava.net.Socket;

publicclassReceiver{

publicstaticvoidmain(String[]args)throwsException{
Receiverreceiver=newReceiver(8888);
receiver.receive();
}

;

publicReceiver(intport)throwsIOException{
serverSocket=newServerSocket(port);
}

privatevoidreceive()throwsIOException{
System.out.println("等待客户端连接...");
Socketsocket=serverSocket.accept();
try(DataInputStreamdis=newDataInputStream(socket.getInputStream())){
byte[]bytes=newbyte[1024];//假设发送的字节数不超过1024个
intsize=dis.read(bytes);//size是读取到的字节数

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

/**
*将byte数组转化为十六进制字符串
*
*@parambytesbyte[]数组
*@parambegin起始位置
*@paramend结束位置
*@returnbyte数组的十六进制字符串表示
*/
privateStringbytesToHex(byte[]bytes,intbegin,intend){
StringBuilderhexBuilder=newStringBuilder(2*(end-begin));
for(inti=begin;i<end;i++){
hexBuilder.append(Character.forDigit((bytes[i]&0xF0)>>4,16));//转化高四位
hexBuilder.append(Character.forDigit((bytes[i]&0x0F),16));//转化低四位
hexBuilder.append('');//加一个空格将每个字节分隔开
}
returnhexBuilder.toString().toUpperCase();
}

}

运行,首先启动服务端:

然后启动客户端:

查看接收结果:

‘柒’ c socket 16进制接收

printf("***all***%s
",buffer);

你这一句不是表明了你buffer里的内容是字符串么

你确定客服传给你的是字符串么?如果不是,你这么输出当然是乱码

应该这么改

printf("***all***%X
",buffer);
阅读全文

与pythonsocket接收16进制相关的资料

热点内容
精品源码怎么算 浏览:490
加密技术在现实中应用体会 浏览:180
单片机如何换晶振 浏览:206
合并两个数组java 浏览:13
命令标注圆半径怎么用 浏览:659
出差人员电脑加密 浏览:248
文件夹0项什么意思 浏览:602
空调冷媒压缩机启动 浏览:911
流氓文件夹怎么强制删除 浏览:783
嵌入式基础命令 浏览:526
当程序员必学的编程语言 浏览:907
pro文件夹有什么用 浏览:357
我的世界服务器有人开挂如何踢出 浏览:482
程序员有天赋 浏览:640
编程计算并输出半径 浏览:709
日期排序java 浏览:953
程序员的中介模式 浏览:881
python中求两个字符串重复部分 浏览:495
如何查看收件发件服务器 浏览:110
linux配置android环境变量 浏览:132