導航:首頁 > 編程語言 > 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進制相關的資料

熱點內容
業務邏輯程序員 瀏覽:657
addto新建文件夾什麼意思 瀏覽:158
有伺服器地址怎麼安裝軟體 瀏覽:659
安卓如何完全清除數據 瀏覽:690
安卓安卓證書怎麼信任 瀏覽:53
伺服器被攻擊如何解決 瀏覽:221
學霸變成程序員 瀏覽:881
c語言編譯錯誤fatalerror 瀏覽:441
ipv4內部伺服器地址怎麼分配 瀏覽:463
java線程安全的方法 瀏覽:950
重復命令畫梯形 瀏覽:164
在疫情就是命令 瀏覽:328
自己搭建一個什麼伺服器好玩 瀏覽:253
java基礎馬士兵 瀏覽:823
完美世界手游如何查看伺服器 瀏覽:859
光遇安卓與ios什麼時候互通 瀏覽:598
js如何運行時編譯 瀏覽:917
引力app在哪裡下載 瀏覽:609
編寫app如何得到錢 瀏覽:801
吉利汽車軟體放哪個文件夾安裝 瀏覽:224