简体   繁体   中英

Android socket is connected but doesn't send data

I'm developing an Android client app which talks to server via a plain TCP Socket, let's assume that the server ip 192.168.1.2 and the androdi device ip is 192.168.1.3.

I open the socket, i check if socket is connected (i get true as result) and after that i write a presentation message.

Here is my code

// scoket setup
Sockets = new Socket(addressToConnect, 2015);
s.setSoTimeout(2500);
setTcpNoDelay(true);

// if i'm connected
if (s.isConnected()) {
    // wrapping streams
    DataInputStream dis = new DataInputStream(s.getInputStream());
    DataOutputStream dos = new DataOutputStream(s.getOutputStream());

    // sending data
    String presentationMessage = "Presentation message content--- TERM";
    dos.write(presentationMessage.getBytes("UTF-8");
    dos.flush();

    // buffers
    byte[] readBuffer = new byte[4096];
    StringBuffer responseBuffer = new StringBuffer();

    // read data until command terminator string is found
    boolean readResponse = true;
    while (readResponse) {
        int dataBufferLength = dis.read(readBuffer);
        String chunk = new String(readBuffer, 0, dataBufferLength, "UTF-8"));
        responseBuffer.append(chunk);
        readResponse = ! chunk.endWith("--- TERM");
    }

    // Process data here
} else {
    // Notify missing connection here
}
// here i close the socket

When i execute this code the execution seems working like a charme until the first read which timesout.

Sniffing the used WIFI network with a third machine i can't see the connection establishment and the written stream even if the code doesn't throw any exception before the read timeout.

I granted the android.permission.INTERNET in manifest.

Are there some other permissions to grant? or what i'm doing wrong?

Executing the same code in a standard Java SE environment everything goes fine.

I'm testing the code on a Nexus 5, Nexus 9 and Samsung S3 and S4 and the project is compatible with API 14+

Edit: Fixed typo in code example

You are reading from dos and writing to dis. You should reverse that.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM