Android客户端套接字IOException



编辑:问题是客户端中的输入。这些是导致崩溃的以下行:

        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);
        }

这是我的 client.class in android:

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();
    }
}

}

,如果需要的话,我的server.class在java中:

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();
    }
}

服务器所需的处理程序:

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();
    }
}

}

在上面的评论中解决了调试。

步骤1:在此处概述的Android清单文件中添加权限:Java套接字IOException-拒绝权限

步骤2:更改while ((text = reader.readLine()) != null)检查。我猜text = reader.readLine() != null检查是有问题的。

最新更新