Die android.os.NetworkOnMainThreadException sagt aus, dass du versuchst auf den Main-Thread Netzwerk Operationen auszuführen, was nicht erlaubt ist.
Startet einfach die Netzwerk-Operationen in einen neuen Thread.
So in etwa sollte es gehen, aber kann es aber gerade nicht testen, eventuell musst du da noch paar Sachen anpassen.
public class MainActivity extends Activity {
// Inistailierung
Button Send;
EditText IP;
EditText Port;
TextView Answer;
EditText Message;
private String ip_address;
private int port = 11880;
private SSLSocket socket = null;
private BufferedReader in = null;
private BufferedWriter out = null;
private final String TAG = "TAG";
private char keystorepass[] = "key12345".toCharArray();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Send = (Button) findViewById(R.id.btnSend);
IP = (EditText) findViewById(R.id.etIP);
Port = (EditText) findViewById(R.id.etPort);
Answer = (TextView) findViewById(R.id.tvAnswer);
Message = (EditText) findViewById(R.id.etMessage);
Send.setClickable(true);
Send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (IP.getText().toString().equals(null) || Port.getText().toString().equals(null)){
Toast.makeText(v.getContext(), "Bitte IP und Port eingeben", Toast.LENGTH_LONG).show();
}else {
String temp = Message.getText().toString();
if (temp == null){
temp = "Es wurde keine Nachricht eingegeben";
}
port = Integer.parseInt(Port.getText().toString());
ip_address = IP.getText().toString();
try{
//HIER DEN NETZWERK-OPERATIONEN IN NEUEN THREAD STARTEN
new Thread() {
@Override
public void run() {
try {
KeyStore ks = KeyStore.getInstance("BKS");
InputStream keyin = v.getResources().openRawResource(R.raw.neuserverkeypem);
ks.load(keyin,keystorepass);
org.apache.http.conn.ssl.SSLSocketFactory socketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(ks);
socketFactory.setHostnameVerifier(socketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
socket = (SSLSocket)
socketFactory.createSocket(new Socket(ip_address,port), ip_address, port, false);
socket.startHandshake();
printServerCertificate(socket);
printSocketInfo(socket);
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
chat(temp);
} catch (UnknownHostException e) {
Toast.makeText(v.getContext(), "Unknown host", Toast.LENGTH_SHORT).show();
Log.i(TAG,"Unknown host");
//System.exit(1);
} catch (IOException e) {
Toast.makeText(v.getContext(), "No I/O", Toast.LENGTH_SHORT).show();
Log.i(TAG,"No I/O");
e.printStackTrace();
//System.exit(1);
} catch (KeyStoreException e) {
Toast.makeText(v.getContext(), "Keystore ks error", Toast.LENGTH_SHORT).show();
Log.i(TAG,"Keystore ks error");
//System.exit(-1);
} catch (NoSuchAlgorithmException e) {
Toast.makeText(v.getContext(), "No such algorithm for ks.load", Toast.LENGTH_SHORT).show();
Log.i(TAG,"No such algorithm for ks.load");
e.printStackTrace();
//System.exit(-1);
} catch (CertificateException e) {
Toast.makeText(v.getContext(), "certificate missing", Toast.LENGTH_SHORT).show();
Log.i(TAG,"certificate missing");
e.printStackTrace();
//System.exit(-1);
} catch (UnrecoverableKeyException e) {
Toast.makeText(v.getContext(), "UnrecoverableKeyException", Toast.LENGTH_SHORT).show();
Log.i(TAG,"unrecoverableKeyException");
e.printStackTrace();
//System.exit(-1);
} catch (KeyManagementException e) {
Toast.makeText(v.getContext(), "KeyManagementException", Toast.LENGTH_SHORT).show();
Log.i(TAG,"key management exception");
e.printStackTrace();
//System.exit(-1);
}
}
}).start();
}
catch(Exception ex){}
}
}
});
}
private void printServerCertificate(SSLSocket socket) {
try {
Certificate[] serverCerts =
socket.getSession().getPeerCertificates();
for (int i = 0; i < serverCerts.length; i++) {
Certificate myCert = serverCerts[i];
Log.i(TAG,"====Certificate:" + (i+1) + "====");
Log.i(TAG,"-Public Key-\n" + myCert.getPublicKey());
Log.i(TAG,"-Certificate Type-\n " + myCert.getType());
System.out.println();
}
} catch (SSLPeerUnverifiedException e) {
Log.i(TAG,"Could not verify peer");
e.printStackTrace();
System.exit(-1);
}
}
private void printSocketInfo(SSLSocket s) {
Log.i(TAG,"Socket class: "+s.getClass());
Log.i(TAG," Remote address = "
+s.getInetAddress().toString());
Log.i(TAG," Remote port = "+s.getPort());
Log.i(TAG," Local socket address = "
+s.getLocalSocketAddress().toString());
Log.i(TAG," Local address = "
+s.getLocalAddress().toString());
Log.i(TAG," Local port = "+s.getLocalPort());
Log.i(TAG," Need client authentication = "
+s.getNeedClientAuth());
SSLSession ss = s.getSession();
Log.i(TAG," Cipher suite = "+ss.getCipherSuite());
Log.i(TAG," Protocol = "+ss.getProtocol());
}
public void chat(String temp){
String message = temp;
String line = "";
// send id of the device to match with the image
try {
out.write(message+"\n");
out.flush();
} catch (IOException e2) {
Log.i(TAG,"Read failed");
System.exit(1);
}
// receive a ready command from the server
try {
line = in.readLine();
Answer.setText("SERVER SAID: "+line);
//Log.i(TAG,line);
} catch (IOException e1) {
Log.i(TAG,"Read failed");
System.exit(1);
}
}
}
Alles anzeigen