При передаче строки от сервера к клиенту появляются неизвестные символы
Выполняю простое действие, отправляю от клиента на сервер объект, произвожу с ним действия, после чего отправляю клиенту назад строку с результатом. Но при считывании строки на стороне клиента появляются неизвестные символы. Для связи клиент-сервер использую Socket, для записи и считывания строки BufferedWriter, BufferedReader.
Клиент (Прописан в AndroidStudio, запускаю на android):
public class Client {
public User user = null;
public String result = null;
private Thread thread = null;
public Client (User user) {
this.user = user;
}
public String sendUser(){
thread = new Thread(null, processOnBackground, "processOnBackground");
return result;
}
private final Runnable processOnBackground = new Runnable() {
@Override
public void run() {
Socket socket = null;
ObjectOutputStream oos = null;
BufferedReader reader = null;
try {
socket = new Socket(address, port);
oos = new ObjectOutputStream(socket.getOutputStream());
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
oos.writeObject(user);
oos.flush();
result = reader.readLine();
} catch (Exception ex) {
result = ex.toString();
}
}
};
}
Сервер (Прописан в Eclipce, запускаю в командной строке):
public class Server {
public static LinkedList<ServerWorker>serverList = new LinkedList<>();
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(port);
}catch(IOException ex) {
System.out.println(ex.toString());
System.exit(-1);
}
Socket clientSocket = null;
try {
while(true) {
clientSocket = serverSocket.accept();
try {
serverList.add(new ServerWorker(clientSocket));
}catch(IOException ex) {
clientSocket.close();
}
}
}finally {
serverSocket.close();
}
}
}
ServerWorker:
public class ServerWorker extends Thread{
private Socket socket = null;
private ObjectInputStream inObject = null;
private BufferedWriter outString = null;
public ServerWorker (Socket socket) throws IOException{
this.socket = socket;
inObject = new ObjectInputStream(socket.getInputStream());
outString = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
start();
}
@Override
public void run() {
try {
User user = (User)inObject.readObject();
//Do some...
if (successfulSuccess){
sendString("SUCCESS");
}else{
sendString(":-(");
}
}catch(Exception ex) {
System.out.println(ex.toString());
}
}
private void sendString(String value){
try {
outString.write(value);
outString.flush();
outString.close();
}catch(Exception ex) {
System.out.println(ex.toString());
}
}
}
С сервера улетает:
SUCCESS
А к клиенту прилетает:
�� SUCCESS
Пытался уточнять кодировку:
reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "Cp1251"));
outString = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "Cp1251"));
но это лишь изменило вопросики на другие закарлючки.