Ваш вопрос немного двусмысленный; Вы говорите, что не можете получить строку Unicode на стороне Java - Вы получаете ошибку или строку ASCII? Я предполагаю, что вы получаете строку ASCII, потому что это то, что отправляет ваш метод SendString (), но, возможно, есть дополнительные проблемы.
Ваш метод SendString () начинается с преобразования переданной строки в массив байтов в кодировке ASCII; Измените ASCII на UTF8, и вы должны отправить UTF-8:
void SendString(String message)
{
byte[] buffer = Encoding.UTF8.GetBytes(message);
AsyncCallback ac = new AsyncCallback(SendStreamMsg);
tcpClient.GetStream().BeginWrite(buffer, 0, buffer.Length, ac, null);
}
У вас, похоже, слишком много ненужной работы по кодированию выше определения этого метода, но без дополнительной информации я не могу гарантировать, что работа над кодировкой над ней не нужна ...