Приложението има клиентски и сървърни нишки. Клиентската нишка работи правилно. Има проблем по време на четене от сървъра това, което клиентът на другото приложение изпраща към моето приложение.
Има две изисквания за внедряване на този сървър
- Трябва да използвам UTF-16LE кодиране
- Не мога да използвам readLine, трябва само да използвам read byte/s
Опитах много примери, но изглежда нищо не работи правилно.
Ето кода на сървъра
private static final int NUM_STATUSES = 30;
private static final int NUM_ERRORES = 50;
private ServerSocket _serverSocket;
private Socket _socket;
private Handler _handler;
private int _port;
//handler of main activity
public ServerNetworkThread()
{
setName("ServerNetworkThread");
}
public void setHandler(Handler h)
{
_handler = h;
}
@Override
public void run()
{
_isWorking = true;
try
{
_serverSocket = new ServerSocket();
_serverSocket.setReuseAddress(true);
_serverSocket.bind(new InetSocketAddress(_port));
while (_isWorking)
{
_socket = _serverSocket.accept();
_socket.setSoTimeout(Consts.CLIENT_SOCKET_TIMEOUT);
readDataTest();
}
}
catch (SocketTimeoutException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void readDataTest() throws IOException
{
// BufferedReader inFromClient = new BufferedReader(new InputStreamReader(_socket.getInputStream(),Charset.forName("UTF-16LE")));
InputStream iStream = _socket.getInputStream();
InputStreamReader in = new InputStreamReader(iStream, Charset.forName("UTF-16LE"));
DataOutputStream outToClient = new DataOutputStream(_socket.getOutputStream());
char[] buf = new char[iStream.available()];
in.read(buf, 0, buf.length);
String request = new String(buf);
String responseStr = parseResponse(request);
byte[] response = responseStr.getBytes("UTF-16LE");
outToClient.write(response);
outToClient.flush();
outToClient.close();
in.close();
_socket.close();
// inFromClient.close();
}
Понякога получавам таймаут, когато се опитвам да прочета данните, които сървърът получава от клиента.
Благодаря за вашата помощ
String request = new String(buf);
изграждате низ, използвайки UTF-8 с байтове, идващи от UTF-16L. Посочете набора от знаци, когато конструирате този низ - person Nadir   schedule 07.03.2016readLine()
и т.н.? - person user207421   schedule 14.03.2016