Hallo Leute,
ich versuche gerade meine App mit nem Server Kommunizieren zu lassen:
Ich habe einen lokalen Server mit xampp, eine runnable jar für den serverseitigen Socket und eine App erstellt.
Folgende Fehlermeldung erscheint:
Code für die App wäre:
und die manifest Datei:
Ich dachte es liegt vielleicht an der Firewall also habe ich die mal ausgeschaltet aber leider auch nicht.
Vielleicht ist Serverseitig schon was falsch?
Ich hab dir runnable jar einfach ins root Verzeichnis gepackt und mit dem Befehl java -jar ausgeführt.
Ich bin neu in dem ganzen Thema. Habe ich etwas falsch gemacht oder vergessen?
ich versuche gerade meine App mit nem Server Kommunizieren zu lassen:
Ich habe einen lokalen Server mit xampp, eine runnable jar für den serverseitigen Socket und eine App erstellt.
Folgende Fehlermeldung erscheint:
06-10 16:52:18.597 17744-17744/com.example.pc.client E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.pc.client, PID: 17744
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1156)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
at libcore.io.IoBridge.connectErrno(IoBridge.java:141)
at libcore.io.IoBridge.connect(IoBridge.java:126)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)
at java.net.Socket.startupSocket(Socket.java:595)
at java.net.Socket.tryAllAddresses(Socket.java:133)
at java.net.Socket.<init>(Socket.java:183)
at java.net.Socket.<init>(Socket.java:155)
at com.example.pc.client.Client.test(Client.java:76)
at com.example.pc.client.Client$1.onClick(Client.java:37)
at android.view.View.performClick(View.java:4856)
at android.view.View$PerformClick.run(View.java:19956)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Code für die App wäre:
Java:
package com.example.pc.client;
import android.os.Bundle;
import android.os.Debug;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.Toast;
import java.io.*;
public class Client extends AppCompatActivity {
Button btnTest = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_client);
btnTest = (Button) findViewById(R.id.btnTest);
btnTest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Hallo","Hallo");
Client client = new Client();
try {
client.test();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_client, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
void test() throws IOException {
String ip = "192.168.*.***"; // localhost//Platzhalter
int port = 8080;
java.net.Socket socket = new java.net.Socket(ip,port); // verbindet sich mit Server
String zuSendendeNachricht = "Hello, world!";
schreibeNachricht(socket, zuSendendeNachricht);
String empfangeneNachricht = leseNachricht(socket);
System.out.println(empfangeneNachricht);
}
void schreibeNachricht(java.net.Socket socket, String nachricht) throws IOException {
PrintWriter printWriter = new PrintWriter( new OutputStreamWriter( socket.getOutputStream()));
printWriter.print(nachricht);
printWriter.flush();
}
String leseNachricht(java.net.Socket socket) throws IOException {
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
char[] buffer = new char[200];
int anzahlZeichen = bufferedReader.read(buffer, 0, 200); // blockiert bis Nachricht empfangen
String nachricht = new String(buffer, 0, anzahlZeichen);
return nachricht;
}
}
und die manifest Datei:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pc.client">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".Client"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
Ich dachte es liegt vielleicht an der Firewall also habe ich die mal ausgeschaltet aber leider auch nicht.
Vielleicht ist Serverseitig schon was falsch?
Ich hab dir runnable jar einfach ins root Verzeichnis gepackt und mit dem Befehl java -jar ausgeführt.
Ich bin neu in dem ganzen Thema. Habe ich etwas falsch gemacht oder vergessen?