首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 客戶端與 C# 服務端 Socket 通訊:字符編碼處理指南

     編輯:程式設計綜合問答

跨語言 Socket 通訊核心難點在於字節序與字符編碼一致性。本文給出 Java 客戶端發送、C# 服務端接收的編碼處理最佳實踐。

核心原則

  • 網絡傳輸的是字節流
  • 雙方必須約定同一字符集(推薦 UTF-8)
  • 發送端:String → byte[] (編碼) → 發送
  • 接收端:接收 byte[] → String (解碼)

C# 服務端編解碼

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") 等均可,關鍵是雙方一致。

Java 客戶端對應代碼

// 發送
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);

進階建議

  1. 長度前綴:發送前先寫 4 字節長度(BitConverter.GetBytes / ByteBuffer.putInt),解決粘包/半包
  2. 協議層:定義簡單協議(如 JSON + 換行符、Protobuf、MessagePack)
  3. 異常處理:捕獲 CharacterCodingException / DecoderFallbackException 防止惡意數據導致崩潰

統一 UTF-8 + 長度前綴,是跨語言 Socket 通訊的「黃金標準」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved