Не удается получить сообщение с сервера через сокет Android - PullRequest
0 голосов
/ 11 октября 2011

Я написал функцию для отправки и получения сообщений с сервера, например:

//Send mess to server through socket
public boolean send_Message_service(String mess) throws IOException{
    Log.i("debug", "Connection status: "+String.valueOf(this.clientSocket.isBound()));
    boolean rs=false;
    //Send mess toi server
    BufferedReader in = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(this.clientSocket.getOutputStream())), true);
    out.println(mess);      
    //Receive mess from server

    String mess_From_Server=in.readLine();

    if(mess_From_Server.equalsIgnoreCase("success")){
        rs=true;
    }
    else{
        rs=false;
    }

    return rs;
}   

Эта функция может отправлять сообщения на сервер, но не может получать сообщения от сервера. Когда я запускаю его на своем телефоне, это занимает много времени и принудительное закрытие!

Вот логкат:

10-11 12:17:35.201: INFO/global(279): Default buffer size used in BufferedWriter constructor. It would be better to be explicit if an 8k-char buffer is required.
10-11 12:21:26.321: DEBUG/SntpClient(61): request time failed: java.net.SocketException: Address family not supported by protocol

А вот код сервера (работает на Java, а не на Android):

int receiveMsgSize;//Size of received message
    byte[] receiveBuf= new byte[100]; //Receive Buffer
try {
        ObjectOutputStream oos = new  ObjectOutputStream(this.clientSocket.getOutputStream());
                    InputStream in;
        in = this.clientSocket.getInputStream();

        while((receiveMsgSize=in.read(receiveBuf))!=-1){

            String mess=new String(receiveBuf,0,receiveMsgSize);
            System.out.println(mess.length());
            System.out.println(mess);                                           
            }                                                               
            oos.writeObject("success");
        }                           
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

1 Ответ

2 голосов
/ 11 октября 2011
  1. Ваш сервер отправляет ответ через ObjectOutputStream.writeObject.
  2. Ваш клиент читает ответ через BufferedReader.readLine ().

Это никогда не сработает.

Если у вас есть ObjectOutputStream на одном конце, у вас должен быть ObjectInputStream на другом конце.

Если у вас есть writeObject () на одном конце, вы должны иметь readObject () на другом конце.

Если у вас есть writeXXX () на одном конце, вы должны иметь readXXX () на другом конце, для всех XXX, которые я могу придумать.

Или наоборот, если у вас есть BufferedReader.readLine () на одном конце, вы должны иметь BufferedWriter.write (), за которым следует BufferedWriter.newLine () на другом конце.

Не используйте PrintStream или PrintWriter по сети, поскольку они поглощают исключения, о которых вам нужно знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...