导航:首页 > 编程语言 > phpsocket16进制

phpsocket16进制

发布时间:2023-01-31 07:46:36

1. 请教用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();
}

}

运行,首先启动服务端:

然后启动客户端:

查看接收结果:

2. socket接收16进制速度比较快

是的,比较快 接收设置,sock接收的数据是bytes类型,收到的普通数据为b'xxx‘,转换成str类型,需要’xxx'.decode('utf-8'),但是收到的‘aa'十六进制的bytes数据为b'\xaa',需转换成普通 str 'aa',转换用'xx'.hex()即可转换。
if recv_msg:
msg = f"来自IP:{address[0]}端口:{address[1]}:"
self.tcp_signal_write_msg.emit(msg)
try:
info = recv_msg.decode("utf-8")
self.tcp_signal_write_info.emit(info, self.InfoRec)
except Exception as ret:
if recv_msg.hex(): #将16进制bytes b'\xaa'转换成utf-8 str 'aa'
info = recv_msg.hex()
self.tcp_signal_write_info.emit(info, self.InfoRec)
else:
msg="数据格式错误"+ret.__str__()
self.tcp_signal_write_msg.emit(msg)
解析接收的数据:以十六进制显示与普通方式显示
if self.receive_HEX_flag: # 以十六进制接收
info=bytes(info,encoding='utf-8') #转换成bytes类型
info_hex = base64.b16encode(info) #16进制编码
else:
info_hex = info
base64以16进制编码需bytes类型,重新将str转换为bytes,用 bytes(info,encoding='utf-8')转换。
发送设置:
if self.send_HEX_flag: #以十六进制发送
info_hex=base64.b16encode(info.encode())
else:
info_hex=info
16进制发只需将所需数据转换成16进制即可,普通发送不用转换。

3. Android socket 获得16进制数据

mDataOutputClient = new DataOutputStream(mSocketClient.getOutputStream());
//发送
mDataOutputClient.write(0XFF);
mDataOutputClient.flush();
//接收
DataInputStream dis = new DataInputStream(mSocketClient.getInputStream());
int r=dis.readInt(); //接收int

接收十六进制。==> byte r=dis.readByte();
发送十六进制。==> byte r= (byte) 0xFF; dos.writeByte(r);

BufferedReader不推荐使用,因为不适合。

4. 请教php大神,php如何实现点击页面上的一个按钮发送socket的tcp数据

1.参考资料

socket_create()函数需要三个参数:一个协议、一个socket类型、一个公共协议。socket_create()函数运行成功返回一个

包含socket的资源类型,如果没有成功则返回false。

Socket函数
函数名 描述
函数名 描述
socket_accept() 接受一个Socket连接
socket_bind() 把socket绑定在一个IP地址和端口上
socket_clear_error() 清除socket的错误或最后的错误代码
socket_close() 关闭一个socket资源
socket_connect() 开始一个socket连接
socket_create_listen() 在指定端口打开一个socket监听
socket_create_pair() 产生一对没有差别的socket到一个数组里
socket_create() 产生一个socket,相当于产生一个socket的数据结构
socket_get_option() 获取socket选项
socket_getpeername() 获取远程类似主机的ip地址
socket_getsockname() 获取本地socket的ip地址
socket_iovec_add() 添加一个新的向量到一个分散/聚合的数组
socket_iovec_alloc() 这个函数创建一个能够发送接收读写的iovec数据结构
socket_iovec_delete() 删除一个已分配的iovec
socket_iovec_fetch() 返回指定的iovec资源的数据
socket_iovec_free() 释放一个iovec资源
socket_iovec_set() 设置iovec的数据新值
socket_last_error() 获取当前socket的最后错误代码
socket_listen() 监听由指定socket的所有连接
socket_read() 读取指定长度的数据
socket_readv() 读取从分散/聚合数组过来的数据
socket_recv() 从socket里结束数据到缓存
socket_recvfrom() 接受数据从指定的socket,如果没有指定则默认当前socket
socket_recvmsg() 从iovec里接受消息
socket_select() 多路选择
socket_send() 这个函数发送数据到已连接的socket
socket_sendmsg() 发送消息到socket
socket_sendto() 发送消息到指定地址的socket
socket_set_block() 在socket里设置为块模式
socket_set_nonblock() socket里设置为非块模式
socket_set_option() 设置socket选项
socket_shutdown() 这个函数允许你关闭读、写、或指定的socket
socket_strerror() 返回指定错误号的周详错误
socket_write() 写数据到socket缓存
socket_writev() 写数据到分散/聚合数组

2.代码:

<?php
$sendStr='30323034033033';//16进制数据
$sendStrArray=str_split(str_replace('','',$sendStr),2);//将16进制数据转换成两个一组的数组
$socket=socket_create(AF_INET,SOCK_STREAM,getprotobyname("tcp"));//创建Socket
if(socket_connect($socket,"192.168.1.100",8080)){//连接
for($j=0;$j<count($sendStrArray);$j++){
socket_write($socket,chr(hexdec($sendStrArray[$j])));//逐组数据发送
}
$receiveStr="";
$receiveStr=socket_read($socket,1024,PHP_BINARY_READ);//采用2进制方式接收数据
$receiveStrHex=bin2hex($receiveStr);//将2进制数据转换成16进制
echo"client:".$receiveStrHex;
}
socket_close($socket);//关闭Socket
?>

5. php的socket编程

socket_bind($socket,'127.0.0.1',9000);

服务器端绑定IP指的是127.0.0.1,就是服务器本机,监听9000端口

6. 请问通过netty或者socket怎么接收16进制的字节码

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

7. 请教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);

阅读全文

与phpsocket16进制相关的资料

热点内容
吃鸡国际体验服为什么服务器繁忙 浏览:92
php中sleep 浏览:488
vr怎么看视频算法 浏览:84
手机app如何申报个人所得税零申报 浏览:692
如何截获手机app连接的ip 浏览:330
冰箱压缩机是否需要电容 浏览:344
python列表每一行数据求和 浏览:274
自己有一台服务器可以玩什么 浏览:656
社会学波普诺pdf 浏览:584
解压做食物的小视频 浏览:758
pdf怎么单独设置文件夹 浏览:474
业务逻辑程序员 浏览:659
addto新建文件夹什么意思 浏览:161
有服务器地址怎么安装软件 浏览:660
安卓如何完全清除数据 浏览:692
安卓安卓证书怎么信任 浏览:54
服务器被攻击如何解决 浏览:222
学霸变成程序员 浏览:883
c语言编译错误fatalerror 浏览:443
ipv4内部服务器地址怎么分配 浏览:464