應用程序具有客戶端和服務器線程。客戶端線程正常工作。 在從服務器讀取其他應用程序的客戶端發送給我的應用程序的過程中出現問題。使用套接字從服務器線程中的套接字讀取數據
有兩個要求來實現這個服務器
- 我需要使用UTF-16LE編碼
- 我不能使用輸入行,我只需要使用讀取字節/秒
我嘗試了很多例子,但似乎沒有任何工作正常。
這裏是服務器
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();
}
的有時候我收到的時候我試圖讀取服務器從客戶端接收數據超時的代碼。
感謝您的幫助
你可以發佈stacktrace嗎? – Nadir
打印我收到的東西后,我發現了一些奇怪的東西: request = BB0006 └א└א└א└א└א└א└א└א└א└א└א└א└א└א└א└ א└א└א└א└א└א 最後有很多字符不需要在那裏,也許有問題,行 char [] buf = new char [iStream.available()] ; –
在'String request = new String(buf);'你正在使用UTF-8構建一個字符串,字節是從UTF-16L開始的。在構建字符串時指定字符集 – Nadir