跨語言 Socket 通訊核心難點在於字節序與字符編碼一致性。本文給出 Java 客戶端發送、C# 服務端接收的編碼處理最佳實踐。
String → byte[] (編碼) → 發送byte[] → String (解碼)using System.Text;
// 發送
string msg = "Hello 中文";
byte[] data = Encoding.UTF8.GetBytes(msg);
socket.Send(data);
// 接收
byte[] buffer = new byte[1024];
int len = socket.Receive(buffer);
string received = Encoding.UTF8.GetString(buffer, 0, len);
Encoding.GetEncoding("utf-8")、Encoding.Unicode(UTF-16LE)、Encoding.GetEncoding("gb2312") 等均可,關鍵是雙方一致。
// 發送
String msg = "Hello 中文";
byte[] data = msg.getBytes(StandardCharsets.UTF_8);
outputStream.write(data);
// 接收
byte[] buffer = new byte[1024];
int len = inputStream.read(buffer);
String received = new String(buffer, 0, len, StandardCharsets.UTF_8);
BitConverter.GetBytes / ByteBuffer.putInt),解決粘包/半包CharacterCodingException / DecoderFallbackException 防止惡意數據導致崩潰統一 UTF-8 + 長度前綴,是跨語言 Socket 通訊的「黃金標準」。