Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无HTTP或HTTPS通信的android ssl通信_Android_Sockets_Ssl_Client - Fatal编程技术网

无HTTP或HTTPS通信的android ssl通信

无HTTP或HTTPS通信的android ssl通信,android,sockets,ssl,client,Android,Sockets,Ssl,Client,嗨,我是Android平台的新手。我需要在我的应用程序中编写一个TCP/SSL客户端类,该类使用一些c#server下载文本文件。我已经为ssl通信创建了.cer文件和bks文件。实际上,我需要使用套接字类通信,而不是HTTP或HTTPS通信。 我的android代码是: public class MainActivity extends Activity { static String filename = null; static Socket socket = null; static B

嗨,我是Android平台的新手。我需要在我的应用程序中编写一个TCP/SSL客户端类,该类使用一些c#server下载文本文件。我已经为ssl通信创建了.cer文件和bks文件。实际上,我需要使用套接字类通信,而不是HTTP或HTTPS通信。 我的android代码是:

public class MainActivity extends Activity {
static String filename = null;
static Socket socket = null;
static Boolean flag = true;
Button GetServerData, Upload;
TextView textPort;
EditText et;
Context context;static final int SocketServerPORT = 8889;
static final String SocketServerIP = "169.254.80.80";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button GetServerData = (Button) findViewById(R.id.GetServerData);

    GetServerData.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // Intent i = new Intent(MainActivity.this, MyHttpClient.class);
            // startActivity(i);
            ClientRxThread clientRxThread = new ClientRxThread(
                    SocketServerIP, SocketServerPORT);

            clientRxThread.start();}
    });

}private class ClientRxThread extends Thread {
    String dstAddress;
    int dstPort;

    ClientRxThread(String address, int port) {
        dstAddress = address;
        dstPort = port;
    }

    @Override
    public void run() {
        // Socket socket = null;
        InputStream in;
        int bufferSize = 0;

        try {

            socket = new Socket(dstAddress, dstPort);

            File file = new File(Environment.getExternalStorageDirectory(),
                    "test.txt");
            bufferSize = socket.getReceiveBufferSize();
            in = socket.getInputStream();
            FileOutputStream fos = new FileOutputStream(file);
            BufferedOutputStream output = new BufferedOutputStream(fos);
            DataInputStream clientData = new DataInputStream(in);
            byte[] buffer = new byte[bufferSize];
            int read;
            while ((read = clientData.read(buffer)) > 0) {// != -1) {
                output.write(buffer, 0, read);
            }
            output.flush();
            output.close();
            socket.close();

            MainActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "Finished",
                            Toast.LENGTH_LONG).show();
                }});
        } catch (IOException e) {

            e.printStackTrace();

            final String eMsg = "Something wrong: " + e.getMessage();
            MainActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, eMsg,
                            Toast.LENGTH_LONG).show();
                }
            });

        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}}

你有没有试过SSLSocket,它的用法和普通的Socket一样

private void initSslSocketFactory() {

    try {
        /*
         * SETUP TRUSTSTORE 
         */  
        KeyStore trustStore = KeyStore.getInstance("BKS");  
        TrustManagerFactory trustManagerFactory = TrustManagerFactory  
            .getInstance(TrustManagerFactory.getDefaultAlgorithm());  
        InputStream trustStoreStream = context.getResources()  
            .openRawResource(R.raw.ca);  
        trustStore.load(trustStoreStream, "000000".toCharArray());  
        trustManagerFactory.init(trustStore);  

        /* 
         * SETUP KEYSTORE 
         */  
        KeyStore keyStore = KeyStore.getInstance("PKCS12");  
        KeyManagerFactory keyManagerFactory = KeyManagerFactory  
            .getInstance(KeyManagerFactory.getDefaultAlgorithm());  
        InputStream keyStoreStream = context.getResources()  
            .openRawResource(R.raw.client);  
        keyStore.load(keyStoreStream, "000000".toCharArray());  
        keyManagerFactory.init(keyStore, "000000".toCharArray());  

        /* 
         * SETUP the SSL context to use the truststore and keystore 
         */   
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
        mSslSocketFactory = sslContext.getSocketFactory();
    } catch (NoSuchAlgorithmException e) {
        Log.e(Tag, "" + e.getMessage());
        e.printStackTrace();
    } catch (KeyManagementException e) {
        Log.e(Tag, "" + e.getMessage());
        e.printStackTrace();
    }
}

public void connect() {
    mSslSock = (SSLSocket) mSslSocketFactory.createSocket();
    mSslSock.connect(new InetSocketAddress(host, port));
    mSslSock.setSoTimeout(SOCKET_TIMEOUT);
    mSslSock.setUseClientMode(true);
    mSslSock.setEnabledCipherSuites(mSslSock.getEnabledCipherSuites());
    mSslSock.setEnabledProtocols(mSslSock.getSupportedProtocols());
    mSslSock.connect(SocketAddress);
    ......
}

你好像忘了发代码。你有什么问题?您使用的是哪种文件传输协议?SCP?SFTP?我的c#服务器将文本文件发送到我的android客户端。我的服务器通过套接字编程并通过ssl安全,但我的android应用程序需要通过套接字而不是HTTPS实现ssl安全谢谢,但是在哪里添加我的bks文件?有没有简单的教程教我怎么做?这可能对你也有帮助,