EDIT: Das Problem ist die Eingabe in der Client.class also, wenn die Android-Geräte eine Antwort vom Server erhält. Das sind die folgenden Zeilen, die den Absturz verursacht:Android Client Socket 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);
}
Hier ist meine 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();
}
}
}
Und wenn nötig meine Server.class in 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();
}
}
Die Handler.class benötigt für Server.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();
}
}
}
Die IOException sollte bedeuten, dass der Client keine Verbindung zum Server herstellen kann. Wenn Sie ein Android-Gerät wie ein Telefon verwenden, müssen Sie möglicherweise einige Berechtigungen aktivieren. Hast du das schon untersucht? https://Stackoverflow.com/questions/4074808/java-socket-ioexception-permission-denied – user2570465
@ user2570465 Ja, ich habe diesen Beitrag gelesen und ich habe alle Internet-Berechtigungen. Und wenn ich die App auf mein Android-Handy lade, erhält der Server die Testnachricht, aber die App stürzt ab. So kann das Verbindungsproblem vom Android Emulator – Urbs
kommen Ok. Also der oben beschriebene Fehler mit der IOException auf 'Socket client = new Socket (" localhost ", 5555)' ist behoben und jetzt gibt es einen neuen Fehler? Möchten Sie die Details und die Rückverfolgung bearbeiten? – user2570465