У меня проблемы с установкой сокетного соединения между Android (клиент) и приложением c # (сервер) для правильного чтения ответа.
Я успешно получил сообщение, отправленное с android на c #, и я прекрасно его читаю. Но когда я пытаюсь отправить подтверждение обратно на Android, я не знаю, как правильно справиться с этим, и мне пришлось сделать некоторые предположения, где учебники были неясными. Я получаю ответ на Android, но это не на 100% правильно. Я проверил через Wireshark, что c # отправляет то, что я хочу, и текст выглядит нормально, пока не доберется до android.
C#:
public void SendClientMessage()
{
NetworkStream clientStream = _Client.GetStream();
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] buffer = encoder.GetBytes("Hello Client!"); //Static test message
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
}
...
Android:
private void listenResponse()
{
Log.i(TAG, "listenRespose() Listening...");
try
{
InputStream is = socket.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
byte[] buffer = new byte[1024];
int countBytesRead = bis.read(buffer, 0, 8);
String response = new String(buffer);
Log.i(TAG, "listenResponse() Heard: " + response);
}
catch (IOException e)
{
Log.e(TAG, "listenResponse() IOException", e);
e.printStackTrace();
}
Log.i(TAG, "listenResponse() Done Listening.");
}
...
WireShark shows:
Hello Client!
...
Android LogCat shows:
listenRespose() Listening...
listenResponse() Heard: Hello Cl??????????????????????????? [... ?s continue for a long time]
listenResponse() Done Listening.
Если вместо этого я инициализирую свою строку следующим образом:
String response = new String(buffer, 0, countBytesRead);
Я не получаю все вопросительные знаки по крайней мере, но я все еще не получаю полную строку, которую я должен получить. Я неправильно инициализирую свой байт [], или есть другой способ сделать это более подходящим для простого текста?