當前位置:編程學習大全網 - 編程語言 - 使用Java 1用socket程序發送和接收字節數組 2用十六進制的形式顯示每個字節裏面的內容

使用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();

}

}

運行,首先啟動服務端:

然後啟動客戶端:

查看接收結果:

  • 上一篇:嵌入式系統原理與應用---簡答題
  • 下一篇:抖音短視頻運營指南?
  • copyright 2024編程學習大全網