Simpler TLS/SSL Client

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schau bitte nochmal drüber. Selbe Fehlermeldung noch.


    Quellcode

    1. ublic void onClick(final View v) {
    2. if (IP.getText().toString().equals(null) || Port.getText().toString().equals(null)){
    3. Toast.makeText(getApplicationContext(), "Bitte IP und Port eingeben", Toast.LENGTH_LONG).show();
    4. }else {
    5. final String temp = Message.getText().toString();
    6. if (temp == null){
    7. }
    8. port = Integer.parseInt(Port.getText().toString());
    9. ip_address = IP.getText().toString();
    10. try{
    11. //HIER DEN NETZWERK-OPERATIONEN IN NEUEN THREAD STARTEN
    12. new Thread() {
    13. @Override
    14. public void run() {
    15. try {
    16. KeyStore ks = KeyStore.getInstance("BKS");
    17. InputStream keyin = getApplicationContext().getResources().openRawResource(R.raw.neuserverkeypem);
    18. ks.load(keyin,keystorepass);
    19. org.apache.http.conn.ssl.SSLSocketFactory socketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(ks);
    20. socketFactory.setHostnameVerifier(socketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    21. socket = (SSLSocket)
    22. socketFactory.createSocket(new Socket(ip_address,port), ip_address, port, false);
    23. socket.startHandshake();
    24. printServerCertificate(socket);
    25. printSocketInfo(socket);
    26. out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    27. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    28. chat(temp);
    29. } catch (UnknownHostException e) {
    30. Toast.makeText(getApplicationContext(), "Unknown host", Toast.LENGTH_SHORT).show();
    31. Log.i(TAG,"Unknown host");
    32. //System.exit(1);
    33. } catch (IOException e) {
    34. Toast.makeText(getApplicationContext(), "No I/O", Toast.LENGTH_SHORT).show();
    35. Log.i(TAG,"No I/O");
    36. e.printStackTrace();
    37. //System.exit(1);
    38. } catch (KeyStoreException e) {
    39. Toast.makeText(getApplicationContext(), "Keystore ks error", Toast.LENGTH_SHORT).show();
    40. Log.i(TAG,"Keystore ks error");
    41. //System.exit(-1);
    42. } catch (NoSuchAlgorithmException e) {
    43. Toast.makeText(getApplicationContext(), "No such algorithm for ks.load", Toast.LENGTH_SHORT).show();
    44. Log.i(TAG,"No such algorithm for ks.load");
    45. e.printStackTrace();
    46. //System.exit(-1);
    47. } catch (CertificateException e) {
    48. Toast.makeText(getApplicationContext(), "certificate missing", Toast.LENGTH_SHORT).show();
    49. Log.i(TAG,"certificate missing");
    50. e.printStackTrace();
    51. //System.exit(-1);
    52. } catch (UnrecoverableKeyException e) {
    53. Toast.makeText(getApplicationContext(), "UnrecoverableKeyException", Toast.LENGTH_SHORT).show();
    54. Log.i(TAG,"unrecoverableKeyException");
    55. e.printStackTrace();
    56. //System.exit(-1);
    57. } catch (KeyManagementException e) {
    58. Toast.makeText(getApplicationContext(), "KeyManagementException", Toast.LENGTH_SHORT).show();
    59. Log.i(TAG,"key management exception");
    60. e.printStackTrace();
    61. //System.exit(-1);
    62. }
    63. }
    64. }.start();
    65. }
    66. catch(Exception ex){}
    67. }
    68. }
    Alles anzeigen
  • Wecher fehler kommt denn ?
    zeige mal dein LogCat.

    teste mit dem debugger wo es abstürtzt.
    was mir noch komisch vorkommt ist in deiner printServerCertificate Methode.
    und zwas das "System.out.println();"
    erstens was soll das ?
    zweitens bist du in einem Thread und da kannst du keine ausgaben auf die UI machen,
    ist zwar auf die Console binn mir da arber auch nicht sicher

    auch das ist eigentlich sinnlos

    if (temp == null){
    }

    Ps. Ok die neue zuweisung für dein temp hast du weggelassen weil du den string final hast und somit keine zweite zuweisung machen kanst.
    lasse das final weg.
    und auserdem wird die Variable temp nicht in den Thread vorhanden, sichtbar sein das ist ein neuer Block und Methode.
    mache sie auch Global wie deine "ip" Variable.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Hier nochmal der Fehlercode,


    Quellcode

    1. E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    2. Process: com.example.ccccc.vvvv, PID: 3288
    3. android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    4. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6891)
    5. at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1083)
    6. at android.view.ViewGroup.invalidateChild(ViewGroup.java:5205)
    7. at android.view.View.invalidateInternal(View.java:13656)
    8. at android.view.View.invalidate(View.java:13620)
    9. at android.view.View.invalidate(View.java:13604)
    10. at android.widget.TextView.checkForRelayout(TextView.java:7347)
    11. at android.widget.TextView.setText(TextView.java:4480)
    12. at android.widget.TextView.setText(TextView.java:4337)
    13. at android.widget.TextView.setText(TextView.java:4312)
    14. at com.example.vvvv.ccc.MainActivity.chat(MainActivity.java:176)
    15. at com.example.vvvvv.ccc.MainActivity$1$1.run(MainActivity.java:86)
    Alles anzeigen
    um den Rest kümmer ich mich jetzt mal. Ich nehme jeden Hinweis dankend an. Bin noch kein Pro und ist noch ein Harter Kampf für mich mit Java
  • Ja ok aber final oder const gibt es auch in c ist fast das selbe.
    auch die sichtbarkeit von Variablen ist in C++ OOP nicht anders.

    deine temp Variable im Thread ist lehr.

    ich wolte eigentlich die ausgabe der Logs haben.
    Lasse auch mal die Toast in dem Thread weg.

    in einen Thread solten keine Bildschirmausgaben sein. zumindestens geht es nicht so einfach wie du es machst.
    stackoverflow.com/questions/31…android-toast-in-a-thread
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Quellcode

    1. 10-11 12:46:30.890 3995-3995/? I/art: Late-enabling -Xcheck:jni
    2. 10-11 12:46:30.890 3995-3995/? W/art: Unexpected CPU variant for X86 using defaults: x86
    3. 10-11 12:46:31.013 3995-3995/com.example.dddddddddd.aaa W/System: ClassLoader referenced unknown path: /data/app/com.example.dddddddddd.aaa-2/lib/x86
    4. 10-11 12:46:31.022 3995-3995/com.example.dddddddddd.aaa I/InstantRun: starting instant run server: is main process
    5. 10-11 12:46:31.196 3995-4011/com.example.dddddddddd.aaa D/libEGL: Emulator has host GPU support, qemu.gles is set to 1.
    6. 10-11 12:46:31.197 3995-4011/com.example.dddddddddd.aaa E/libEGL: load_driver(/system/lib/egl/libGLES_emulation.so): dlopen failed: library "/system/lib/egl/libGLES_emulation.so" not found
    7. 10-11 12:46:31.198 3995-4011/com.example.dddddddddd.aaa D/libEGL: loaded /system/lib/egl/libEGL_emulation.so
    8. loaded /system/lib/egl/libGLESv1_CM_emulation.so
    9. 10-11 12:46:31.204 3995-4011/com.example.dddddddddd.aaa D/libEGL: loaded /system/lib/egl/libGLESv2_emulation.so
    10. 10-11 12:46:31.224 3995-4011/com.example.dddddddddd.aaa I/OpenGLRenderer: Initialized EGL, version 1.4
    11. 10-11 12:46:31.224 3995-4011/com.example.dddddddddd.aaa D/OpenGLRenderer: Swap behavior 1
    12. 10-11 12:46:31.311 3995-4011/com.example.dddddddddd.aaa E/EGL_emulation: tid 4011: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
    13. 10-11 12:46:31.311 3995-4011/com.example.dddddddddd.aaa W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xdb2f2da0, error=EGL_BAD_MATCH
    14. 10-11 12:46:31.791 3995-3995/com.example.dddddddddd.aaa I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread.
    15. 10-11 12:46:33.429 3995-3995/com.example.dddddddddd.aaa W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
    16. 10-11 12:46:40.113 3995-3995/com.example.dddddddddd.aaa W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
    17. 10-11 12:46:42.547 3995-3995/com.example.dddddddddd.aaa W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
    18. 10-11 12:46:44.865 3995-3995/com.example.dddddddddd.aaa W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
    19. 10-11 12:46:46.390 3995-4024/com.example.dddddddddd.aaa I/TAG: ====Certificate:1====
    20. -Public Key-
    21. OpenSSLRSAPublicKey{modulus=b5494be54f9eda369a0080b687724c22073411a60cdeb8e319582cab641067c9d3194070a391bedcb56bc66a4fdf7a1172855f7da703a820613ca198b9d77b1336238bc86c40888609abd4eb428f8fe2408736ea5f295c2a74542198b614babb0cde4f37250c5d05701afe9b826abe7c6c0d8e95017f12a34b55b3ce394b01504e7a84616dbaa089943406f838af17a4dc6fabeef0ed30683871a9079c2424fe76fa6556b768646b4c27037a022766b758934721ebb56ec40568343668a9bbc041688054adf7344d7267d07e9b24ae1c81c91fbfed611f6b4dbaad296c0a6edeabf9354fdeea4a76b324a29c68cbc8444f3227e5ce73e5be2d979f8fc9afca1d,publicExponent=10001}
    22. -Certificate Type-
    23. X.509
    24. Socket class: class com.android.org.conscrypt.OpenSSLSocketImplWrapper
    25. Remote address = /136.243.44.109
    26. 10-11 12:46:46.391 3995-4024/com.example.dddddddddd.aaa I/TAG: Remote port = 11880
    27. Local socket address = /10.0.3.15:33506
    28. Local address = /10.0.3.15
    29. Local port = 33506
    30. Need client authentication = false
    31. Cipher suite = TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    32. Protocol = TLSv1.2
    33. 10-11 12:46:46.419 3995-4024/com.example.dddddddddd.aaa E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    34. Process: com.example.dddddddddd.aaa, PID: 3995
    35. android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    36. at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6891)
    37. at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1083)
    38. at android.view.ViewGroup.invalidateChild(ViewGroup.java:5205)
    39. at android.view.View.invalidateInternal(View.java:13656)
    40. at android.view.View.invalidate(View.java:13620)
    41. at android.view.View.invalidate(View.java:13604)
    42. at android.widget.TextView.checkForRelayout(TextView.java:7347)
    43. at android.widget.TextView.setText(TextView.java:4480)
    44. at android.widget.TextView.setText(TextView.java:4337)
    45. at android.widget.TextView.setText(TextView.java:4312)
    46. at com.example.oliverlenk.pmt.MainActivity.chat(MainActivity.java:167)
    47. at com.example.oliverlenk.pmt.MainActivity$1$1.run(MainActivity.java:84)
    48. 10-11 12:46:47.093 3995-4011/com.example.dddddddddd.aaa D/OpenGLRenderer: endAllActiveAnimators on 0xd6059e80 (RippleDrawable) with handle 0xe32f8300
    Alles anzeigen
    Die Toast hab ich auch rausgenommen
  • so nun zeige noch m deinen code
    die metoden printSocketInfo u printServerCertificate werden eigentlich ausgeführt .
    ob die chat ausgefürt wird kann ich nicht sehen da du da keine logs hast bzw haste sie auskommentiert.
    du musst nach dem Tread noch irgent etwas machen was zum absturtz fürt was du uns noch nicht gezeigt hast.
    auch gibt es am anfang ein paar probleme mit einer Lib libEGL
    Ein Feedback auf Tipps ist auch schön. :P
  • Java-Quellcode

    1. import android.app.Activity;
    2. import android.os.Bundle;
    3. import android.view.View;
    4. import android.widget.Button;
    5. import android.widget.EditText;
    6. import android.widget.TextView;
    7. import android.util.Log;
    8. import java.io.BufferedReader;
    9. import java.io.BufferedWriter;
    10. import java.io.IOException;
    11. import java.io.InputStream;
    12. import java.io.InputStreamReader;
    13. import java.io.OutputStreamWriter;
    14. import java.net.Socket;
    15. import java.net.UnknownHostException;
    16. import java.security.KeyManagementException;
    17. import java.security.KeyStore;
    18. import java.security.KeyStoreException;
    19. import java.security.NoSuchAlgorithmException;
    20. import java.security.UnrecoverableKeyException;
    21. import java.security.cert.Certificate;
    22. import java.security.cert.CertificateException;
    23. import javax.net.ssl.SSLPeerUnverifiedException;
    24. import javax.net.ssl.SSLSession;
    25. import javax.net.ssl.SSLSocket;
    26. public class MainActivity extends Activity {
    27. // Inistailierung
    28. Button Send;
    29. EditText IP;
    30. EditText Port;
    31. TextView Answer;
    32. EditText Message;
    33. private String ip_address;
    34. private int port = 11880;
    35. private SSLSocket socket = null;
    36. private BufferedReader in = null;
    37. private BufferedWriter out = null;
    38. private final String TAG = "TAG";
    39. private char keystorepass[] = "key12345".toCharArray();
    40. @Override
    41. protected void onCreate(Bundle savedInstanceState) {
    42. super.onCreate(savedInstanceState);
    43. setContentView(R.layout.activity_main);
    44. Send = (Button) findViewById(R.id.btnSend);
    45. IP = (EditText) findViewById(R.id.etIP);
    46. Port = (EditText) findViewById(R.id.etPort);
    47. Answer = (TextView) findViewById(R.id.tvAnswer);
    48. Message = (EditText) findViewById(R.id.etMessage);
    49. Send.setClickable(true);
    50. Send.setOnClickListener(new View.OnClickListener() {
    51. @Override
    52. public void onClick(final View v) {
    53. if (IP.getText().toString().equals(null) || Port.getText().toString().equals(null)){
    54. }else {
    55. final String temp = Message.getText().toString();
    56. chat(temp);
    57. port = Integer.parseInt(Port.getText().toString());
    58. ip_address = IP.getText().toString();
    59. try{
    60. new Thread() {
    61. @Override
    62. public void run() {
    63. try {
    64. KeyStore ks = KeyStore.getInstance("BKS");
    65. InputStream keyin = getApplicationContext().getResources().openRawResource(R.raw.neuserverkeypem);
    66. ks.load(keyin,keystorepass);
    67. org.apache.http.conn.ssl.SSLSocketFactory socketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(ks);
    68. socketFactory.setHostnameVerifier(socketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    69. socket = (SSLSocket)
    70. socketFactory.createSocket(new Socket(ip_address,port), ip_address, port, false);
    71. socket.startHandshake();
    72. printServerCertificate(socket);
    73. printSocketInfo(socket);
    74. out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    75. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    76. } catch (UnknownHostException e) {
    77. Log.i(TAG,"Unknown host");
    78. //System.exit(1);
    79. } catch (IOException e) {
    80. Log.i(TAG,"No I/O");
    81. e.printStackTrace();
    82. //System.exit(1);
    83. } catch (KeyStoreException e) {
    84. Log.i(TAG,"Keystore ks error");
    85. //System.exit(-1);
    86. } catch (NoSuchAlgorithmException e) {
    87. Log.i(TAG,"No such algorithm for ks.load");
    88. e.printStackTrace();
    89. //System.exit(-1);
    90. } catch (CertificateException e) {
    91. Log.i(TAG,"certificate missing");
    92. e.printStackTrace();
    93. //System.exit(-1);
    94. } catch (UnrecoverableKeyException e) {
    95. Log.i(TAG,"unrecoverableKeyException");
    96. e.printStackTrace();
    97. //System.exit(-1);
    98. } catch (KeyManagementException e) {
    99. Log.i(TAG,"key management exception");
    100. e.printStackTrace();
    101. //System.exit(-1);
    102. }
    103. }
    104. }.start();
    105. }
    106. catch(Exception ex){}
    107. }
    108. }
    109. });
    110. }
    111. private void printServerCertificate(SSLSocket socket) {
    112. try {
    113. Certificate[] serverCerts =
    114. socket.getSession().getPeerCertificates();
    115. for (int i = 0; i < serverCerts.length; i++) {
    116. Certificate myCert = serverCerts[i];
    117. Log.i(TAG,"====Certificate:" + (i+1) + "====");
    118. Log.i(TAG,"-Public Key-\n" + myCert.getPublicKey());
    119. Log.i(TAG,"-Certificate Type-\n " + myCert.getType());
    120. System.out.println();
    121. }
    122. } catch (SSLPeerUnverifiedException e) {
    123. Log.i(TAG,"Could not verify peer");
    124. e.printStackTrace();
    125. System.exit(-1);
    126. }
    127. }
    128. private void printSocketInfo(SSLSocket s) {
    129. Log.i(TAG,"Socket class: "+s.getClass());
    130. Log.i(TAG," Remote address = "
    131. +s.getInetAddress().toString());
    132. Log.i(TAG," Remote port = "+s.getPort());
    133. Log.i(TAG," Local socket address = "
    134. +s.getLocalSocketAddress().toString());
    135. Log.i(TAG," Local address = "
    136. +s.getLocalAddress().toString());
    137. Log.i(TAG," Local port = "+s.getLocalPort());
    138. Log.i(TAG," Need client authentication = "
    139. +s.getNeedClientAuth());
    140. SSLSession ss = s.getSession();
    141. Log.i(TAG," Cipher suite = "+ss.getCipherSuite());
    142. Log.i(TAG," Protocol = "+ss.getProtocol());
    143. }
    144. public void chat(String temp){
    145. String message = temp;
    146. String line = "";
    147. // send id of the device to match with the image
    148. try {
    149. out.write(message+"\n");
    150. out.flush();
    151. } catch (IOException e2) {
    152. Log.i(TAG,"Read failed");
    153. System.exit(1);
    154. }
    155. // receive a ready command from the server
    156. try {
    157. line = in.readLine();
    158. Answer.setText("SERVER SAID: "+line);
    159. //Log.i(TAG,line);
    160. } catch (IOException e1) {
    161. Log.i(TAG,"Read failed");
    162. System.exit(1);
    163. }
    164. }
    165. }
    Alles anzeigen
  • aber dein temp ist immer noch final und lokal wird wohl somit nicht im Thread und somit in der chat Methode ankommen. prüfe das mit einen LOG

    auch der aufruf der chat in zeile 59 hilft da nicht ist fralsch .
    mache es so wie ich gesagt habe global im Klassenrupf und ohne final
    das chat muss wieder in den Thread.
    denn zu dem zeitpunkt sind deine "in" u "out" Reader noch nicht gesetzt.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jogimuc ()

  • Eigentlich ist dafür die Klasse asynctask besser geeignet. Als die klassische thread Lösung und Handler der im ui thread läuft.

    An Sonden gibt es da noch runOnUiThread

    stackoverflow.com/questions/11…-runonuithread-in-android

    Aber multithreading gibt es in C++ doch auch . Ok die Klasse asynctask gibt es dort nicht. So was wie Handler schon.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Neu

    Java-Quellcode

    1. import android.app.Activity;
    2. import android.os.Bundle;
    3. import android.view.View;
    4. import android.widget.Button;
    5. import android.widget.EditText;
    6. import android.widget.TextView;
    7. import android.util.Log;
    8. import java.io.BufferedReader;
    9. import java.io.BufferedWriter;
    10. import java.io.IOException;
    11. import java.io.InputStream;
    12. import java.io.InputStreamReader;
    13. import java.io.OutputStreamWriter;
    14. import java.net.Socket;
    15. import java.net.UnknownHostException;
    16. import java.security.KeyManagementException;
    17. import java.security.KeyStore;
    18. import java.security.KeyStoreException;
    19. import java.security.NoSuchAlgorithmException;
    20. import java.security.UnrecoverableKeyException;
    21. import java.security.cert.Certificate;
    22. import java.security.cert.CertificateException;
    23. import javax.net.ssl.SSLPeerUnverifiedException;
    24. import javax.net.ssl.SSLSession;
    25. import javax.net.ssl.SSLSocket;
    26. public class MainActivity extends Activity {
    27. // Inistailierung
    28. Button Send;
    29. EditText IP;
    30. EditText Port;
    31. TextView Answer;
    32. EditText Message;
    33. private String ip_address;
    34. private int port = 11880;
    35. private String temp
    36. private SSLSocket socket = null;
    37. private BufferedReader in = null;
    38. private BufferedWriter out = null;
    39. private final String TAG = "TAG";
    40. private char keystorepass[] = "key12345".toCharArray();
    41. @Override
    42. protected void onCreate(Bundle savedInstanceState) {
    43. super.onCreate(savedInstanceState);
    44. setContentView(R.layout.activity_main);
    45. Send = (Button) findViewById(R.id.btnSend);
    46. IP = (EditText) findViewById(R.id.etIP);
    47. Port = (EditText) findViewById(R.id.etPort);
    48. Answer = (TextView) findViewById(R.id.tvAnswer);
    49. Message = (EditText) findViewById(R.id.etMessage);
    50. Send.setClickable(true);
    51. Send.setOnClickListener(new View.OnClickListener() {
    52. @Override
    53. public void onClick(final View v) {
    54. if (IP.getText().toString().equals(null) || Port.getText().toString().equals(null)){
    55. }else {
    56. temp = Message.getText().toString();
    57. if (temp == null){
    58. temp = "Es wurde keine Nachricht eingegeben";
    59. }
    60. port = Integer.parseInt(Port.getText().toString());
    61. ip_address = IP.getText().toString();
    62. try{
    63. new Thread() {
    64. @Override
    65. public void run() {
    66. try {
    67. KeyStore ks = KeyStore.getInstance("BKS");
    68. InputStream keyin = getApplicationContext().getResources().openRawResource(R.raw.neuserverkeypem);
    69. ks.load(keyin,keystorepass);
    70. org.apache.http.conn.ssl.SSLSocketFactory socketFactory = new org.apache.http.conn.ssl.SSLSocketFactory(ks);
    71. socketFactory.setHostnameVerifier(socketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    72. socket = (SSLSocket)
    73. socketFactory.createSocket(new Socket(ip_address,port), ip_address, port, false);
    74. socket.startHandshake();
    75. printServerCertificate(socket);
    76. printSocketInfo(socket);
    77. out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    78. in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    79. chat(temp);
    80. } catch (UnknownHostException e) {
    81. Log.i(TAG,"Unknown host");
    82. //System.exit(1);
    83. } catch (IOException e) {
    84. Log.i(TAG,"No I/O");
    85. e.printStackTrace();
    86. //System.exit(1);
    87. } catch (KeyStoreException e) {
    88. Log.i(TAG,"Keystore ks error");
    89. //System.exit(-1);
    90. } catch (NoSuchAlgorithmException e) {
    91. Log.i(TAG,"No such algorithm for ks.load");
    92. e.printStackTrace();
    93. //System.exit(-1);
    94. } catch (CertificateException e) {
    95. Log.i(TAG,"certificate missing");
    96. e.printStackTrace();
    97. //System.exit(-1);
    98. } catch (UnrecoverableKeyException e) {
    99. Log.i(TAG,"unrecoverableKeyException");
    100. e.printStackTrace();
    101. //System.exit(-1);
    102. } catch (KeyManagementException e) {
    103. Log.i(TAG,"key management exception");
    104. e.printStackTrace();
    105. //System.exit(-1);
    106. }
    107. }
    108. }.start();
    109. }
    110. catch(Exception ex){}
    111. }
    112. }
    113. });
    114. }
    115. private void printServerCertificate(SSLSocket socket) {
    116. try {
    117. Certificate[] serverCerts =
    118. socket.getSession().getPeerCertificates();
    119. for (int i = 0; i < serverCerts.length; i++) {
    120. Certificate myCert = serverCerts[i];
    121. Log.i(TAG,"====Certificate:" + (i+1) + "====");
    122. Log.i(TAG,"-Public Key-\n" + myCert.getPublicKey());
    123. Log.i(TAG,"-Certificate Type-\n " + myCert.getType());
    124. System.out.println();
    125. }
    126. } catch (SSLPeerUnverifiedException e) {
    127. Log.i(TAG,"Could not verify peer");
    128. e.printStackTrace();
    129. System.exit(-1);
    130. }
    131. }
    132. private void printSocketInfo(SSLSocket s) {
    133. Log.i(TAG,"Socket class: "+s.getClass());
    134. Log.i(TAG," Remote address = "
    135. +s.getInetAddress().toString());
    136. Log.i(TAG," Remote port = "+s.getPort());
    137. Log.i(TAG," Local socket address = "
    138. +s.getLocalSocketAddress().toString());
    139. Log.i(TAG," Local address = "
    140. +s.getLocalAddress().toString());
    141. Log.i(TAG," Local port = "+s.getLocalPort());
    142. Log.i(TAG," Need client authentication = "
    143. +s.getNeedClientAuth());
    144. SSLSession ss = s.getSession();
    145. Log.i(TAG," Cipher suite = "+ss.getCipherSuite());
    146. Log.i(TAG," Protocol = "+ss.getProtocol());
    147. }
    148. public void chat(String temp){
    149. String message = temp;
    150. // send id of the device to match with the image
    151. try {
    152. out.write(message+"\n");
    153. out.flush();
    154. } catch (IOException e2) {
    155. Log.i(TAG,"Read failed");
    156. System.exit(1);
    157. }
    158. // receive a ready command from the server
    159. try {
    160. final String line = in.readLine();
    161. runOnUiThread(new Runnable() {
    162. @Override
    163. public void run() {
    164. Answer.setText("SERVER SAID: "+line);
    165. }
    166. });
    167. //Log.i(TAG,line);
    168. } catch (IOException e1) {
    169. Log.i(TAG,"Read failed");
    170. System.exit(1);
    171. }
    172. }
    173. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P