dvxwifiscan
dvxwifiscan

Reputation: 1

Android ServerSocket not sending data to client (client c#, server java)

I'm playing around ServerSocket on Android as the server part. I don't understand how it behaves. Here are what I tested :

A1. Instantiates a ServerSocket on Android

A2. ServerSocket sends "hello" to client

A3. Client can read the "hello" and can answer back to ServerSocket

A4. ServerSocket on Android receives the answer from the client

=> That works perfectly

Now I want the client to be the first to send a message to ServerSocket :

B1. Instantiates a ServerSocket on Android

B2. Client sends data to ServerSocket

B3. ServerSocket receives the data from client

B4. IMPOSSIBLE TO REPLY to the client

May that be a possible normal behaviour ?

Thanks

here is the source code

public void startServer()
{
    log("startServer");
    UUID uuid = UUID.randomUUID();
    final String sessionId = uuid.toString().replace("-", "");
    log("Session ID = " + sessionId);

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (stopServer == false) {
                ServerSocket serverSocket = null;
                try {
                    serverSocket = new ServerSocket(7777);
                    final Socket socket = serverSocket.accept();

                    InputStream inputStream = socket.getInputStream();
                    String strFromClient = "";
                    int i = 0;
                    while (i != -1) {
                        try {
                            i = inputStream.read();
                            if (i != -1)
                                strFromClient += (char) i;
                        }catch (Exception e){
                            break;
                        }
                    }
                    inputStream.close();

                    OutputStream outputStream = socket.getOutputStream();
                    String strToClient = "test";
                    byte[] cArray = strToClient.getBytes();
                    outputStream.write(cArray);
                    outputStream.flush();
                    outputStream.close();

                    socket.close();
                    serverSocket.close();

                    log("end server");
                } catch (Exception e) {
                    //log(e.toString());
                }
            }
        }
    });
    t.start();
}

Upvotes: 0

Views: 387

Answers (1)

dvxwifiscan
dvxwifiscan

Reputation: 1

Ok I found the solution ! The error was because the C# client was not sending the "-1" value (this is only triggered after closing a stream or stuff like that).

The solution is on the Android side, and the reading of the data from the client is now done as follow :

                InputStream inputStream = socket.getInputStream();
                String strFromClient = "";
                int available = inputStream.available();
                Log.d("intelsms", "available from client:" + available);
                for (int i=0;i<available;i++){
                    int c = inputStream.read();
                    strFromClient+=(char)c;
                }

I use the "available()" method in order to know how many bytes are available for reading from the client.

OUF !

Upvotes: 0

Related Questions