应用程序具有客户端和服务器线程。客户端线程正常工作。 在从服务器读取其他应用程序的客户端发送给我的应用程序的过程中出现问题。使用套接字从服务器线程中的套接字读取数据
有两个要求来实现这个服务器
- 我需要使用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