简体   繁体   English

Android客户端套接字IOException

[英]Android Client Socket IOException

EDIT: The problem is the input in the Client.class so when the Android devices receives an answer from the Server. 编辑:问题是Client.class中的输入,因此当Android设备从服务器接收到答案时。 Those are the following lines that causes the crash: 这些是导致崩溃的以下行:

        InputStream input = client.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));

        String text;

        while ((text = reader.readLine()) != null) {
            Log.d("ClientLog", "Received from Server"+ text);
        }

Here is my Client.class in Android: 这是我在Android中的Client.class

public class Client implements Runnable{

public Client() {

}

@Override
public void run() {
    try {
        Log.d("ClientLog", "Socket creation incoming");
        Socket client = new Socket("localhost", 5555);
        Log.d("ClientLog", "Client has been started");

        // Streams:
        OutputStream out = client.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));

        InputStream input = client.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        // -----------------------------------------------------------------------

        writer.write("Test");
        writer.newLine();
        writer.flush();

        String text;

        while ((text = reader.readLine()) != null) {
            Log.d("ClientLog", "Received from Server"+ text);
        }

        writer.close();
        reader.close();

    } catch (UnknownHostException e) {
        Log.d("ClientLog", "Error: Host not found");
        e.printStackTrace();
    } catch (IOException e) {
        Log.d("ClientLog", "Error: IOException");
        e.printStackTrace();
    }
}

} }

And if needed my Server.class in Java: 并且如果需要我的Java Server.class:

public class Server {

public static void main(String[] args) {

    ExecutorService executor = Executors.newFixedThreadPool(30);

    ServerSocket server;
    try {
        server = new ServerSocket(5555);
        System.out.println("Server has been started on Port 5555");

        while(true) {
            try {
                Socket client = server.accept();

                //Thread t = new Thread(new Handler(client));
                //t.start();
                executor.execute(new Handler(client));

            } catch (IOException e) {
                System.out.println("Error IOExceotion");
                e.printStackTrace();
            }
        }

    } catch (IOException e1) {
        e1.printStackTrace();
    }

}

The Handler.class needed for Server.class: Server.class所需的Handler.class:

public class Handler implements Runnable{
private Socket client;

public Handler(Socket pClient) {
    client = pClient;
}

@Override
public void run() {
    try {
                // Streams:
                OutputStream out = client.getOutputStream();
                PrintWriter writer = new PrintWriter(out);

                InputStream input = client.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(input));
                // -----------------------------------------------------------------------

                String text = null;

                while ((text = reader.readLine()) != null) {
                    writer.write(text+ "\n");
                    writer.flush();
                    System.out.println("Recieved from Client: "+ text);
                }

                //Close Streams
                writer.close();
                reader.close();

                client.close();
    } catch (IOException e) {
        System.out.println("Error IOException");
        e.printStackTrace();
    }
}

} }

The debugging was resolved in the comments above. 上面的注释中解决了调试问题。

Step 1: Add permissions to the android manifest file as was outlined here: Java socket IOException - permission denied 步骤1:如此处所述,向Android清单文件添加权限: Java套接字IOException-权限被拒绝

Step 2: Change the while ((text = reader.readLine()) != null) check. 步骤2:更改while ((text = reader.readLine()) != null)检查。 I guess the text = reader.readLine() != null check was problematic. 我猜text = reader.readLine() != null检查是有问题的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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