`
ishelf
  • 浏览: 106349 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Email 源码解析-- MailTransport ( socket , SocketAddress )

阅读更多

      在Email的登录界面,需要配置各种的邮箱。其通信是使用的socket方式进行,具体代码可以参考MailTransport的open方法。

      转载请注明http://ishelf.iteye.com/blog/1022652

    /**
     * Attempts to open a connection using the Uri supplied for connection parameters.  Will attempt
     * an SSL connection if indicated.
     */
    public void open() throws MessagingException, CertificateValidationException {
        if (Config.LOGD && Email.DEBUG) {
            Log.d(Email.LOG_TAG, "*** " + mDebugLabel + " open " + 
                    getHost() + ":" + String.valueOf(getPort()));
        }

        try {
            SocketAddress socketAddress = new InetSocketAddress(getHost(), getPort());
            if (canTrySslSecurity()) {
                mSocket = SSLUtils.getSSLSocketFactory(canTrustAllCertificates()).createSocket();
            } else {
                mSocket = new Socket();
            }
            mSocket.connect(socketAddress, SOCKET_CONNECT_TIMEOUT);
            mIn = new BufferedInputStream(mSocket.getInputStream(), 1024);
            mOut = new BufferedOutputStream(mSocket.getOutputStream(), 512);
            
        } catch (SSLException e) {
            if (Config.LOGD && Email.DEBUG) {
                Log.d(Email.LOG_TAG, e.toString());
            }
            throw new CertificateValidationException(e.getMessage(), e);
        } catch (IOException ioe) {
            if (Config.LOGD && Email.DEBUG) {
                Log.d(Email.LOG_TAG, ioe.toString());
            }
            throw new MessagingException(MessagingException.IOERROR, ioe.toString());
        }
    }

 

      这是一个很典型的java语言的socket通信,不过android的Email通信和gmail通信还有尚邮(第三方应用)有一些区别,表现主要在两个地方:1.数据加载方式,email的邮件提取是通过两次通信实现的,而gmail和尚邮的方式应该是类似的,是通过一次通信实现的,两次加载的优缺点主要就是表现在大附件显示(音乐,视频等)这里,大家可以用尚邮试试。

 

 

     下面给出一个socket通信的test类

 

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

public class SocketTest extends Activity {
    /** Called when the activity is first created. */
    public static String LOG_TAG = "SocketTest";

    private Socket mSocket;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        SocketAddress socketAddress = new InetSocketAddress("imap.gmail.com", 995);
        Log.d(LOG_TAG, "socketAddress :" + socketAddress.toString());
        mSocket = new Socket();
        Log.d(LOG_TAG, "" + mSocket.toString());

        Log.d(LOG_TAG, "mSocket conneted");
        try {
            mSocket.connect(socketAddress, 10000);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.d(LOG_TAG,e.getMessage());
        }
        // After the socket connects to an SSL server, confirm that the hostname
        // is as expected
        Log.d(LOG_TAG, "mSocket conneted ...........");

    }
}
 

 

     下次分析一下Email的附件提取方式。android2.2和1.6两个版本的最大区别在于附件的提取,不过同名附件无法同时收取的问题还是没有解决。 

 

 

2
2
分享到:
评论

相关推荐

    Android Socket调试助手教程及源码

    【Android Socket调试助手教程及源码】 Android Socket调试助手是一个实用工具,用于帮助开发者在Android平台上进行网络通信的调试工作,特别是涉及TCP/IP协议的Socket编程。它通过创建和管理Socket连接,允许...

    java socket 源码

    5. **源码解析** Java Socket 的源码是用 C++ 实现的,通过 JNI(Java Native Interface)与 Java 代码交互。在源码中,`SocketImpl` 类是所有 Socket 实现的基础,它定义了诸如 `accept()`, `bind()`, `connect()`...

    socket 学习笔记

    Socket是Java中用于网络通信的一种基础接口,它提供了一种在网络之间进行双向数据流通信的简单方式。在Java中,Socket类是实现TCP/IP通信的主要工具。以下是对Socket学习笔记的详细解释: 1. **Socket构造方法**: ...

    android应用源码Socket的客户端通信.zip

    2. **建立连接**:调用`Socket.connect(SocketAddress endpoint, int timeout)`方法连接到服务器。 3. **数据传输**:通过Socket的`OutputStream`发送数据,使用`InputStream`接收数据。例如,可以使用`...

    java的Socket编程

    Java的Socket编程是Java网络编程的核心部分,它提供了在TCP/IP协议栈上进行通信的机制。Socket接口是对TCP/IP协议的抽象,使得开发者能够轻松地创建客户端和服务器应用程序,实现网络上的数据交换。在这个主题中,...

    socket详解

    本文将深入解析Socket类的构造方法、成员方法以及相关选项,帮助理解如何在Java中使用Socket进行网络通信。 **一、Socket构造方法** 1. `Socket()`:默认构造方法,不立即建立连接,需要后续调用`connect()`方法。...

    Socket用法详解

    `Socket.connect(SocketAddress endpoint, int timeout)`方法用于连接服务器,其中`endpoint`参数指定服务器地址,`timeout`参数设定超时时间(以毫秒为单位)。如果`timeout`参数设置为0,则表示永远不会超时,默认...

    Socket 网络编程

    - `Socket.connect(SocketAddress endpoint, int timeout)`方法用于发起连接请求,可以设置超时时间。 3. **数据传输**: - `Socket`对象提供`InputStream`和`OutputStream`用于读写数据。通常使用`Socket....

    Socket通信下载文件

    Socket通信是计算机网络编程中的重要组成部分,特别是在分布式系统和客户端-服务器架构中。在这个场景下,Android客户端通过Socket与Java服务器进行通信,实现文件的下载功能。以下将详细阐述Socket通信的基本原理、...

    java socket 简易聊天程序

    Java Socket 简易聊天程序是基于TCP协议实现的一种网络通信工具,主要用于两台或多台计算机之间的数据交换。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了...

    Socket基础知识笔记

    - `Socket connect(SocketAddress endpoint)`:客户端调用此方法连接服务器。 - `ServerSocket(int port)`:服务器端创建ServerSocket,指定监听的端口号。 - `InputStream getInputStream()`:获取Socket的输入...

    Socket编程Socket编程

    Socket编程是计算机网络通信中的重要概念,它提供了一种进程间通信(IPC)的方式,尤其在分布式系统中,使得运行在不同设备上的程序能够相互通信。本文将深入探讨Socket编程的基本原理、主要步骤以及常见应用。 一...

    Socket通讯(有关网络编程)

    - `Socket.connect(SocketAddress endpoint)`:客户端的Socket连接到指定的服务器地址。 - `InputStream getInputStream()` 和 `OutputStream getOutputStream()`:获取Socket的数据输入流和输出流,用于读写数据。 ...

    android Socket通信

    2. **建立连接**:调用`Socket.connect(SocketAddress endpoint, int timeout)`方法尝试连接到服务器。设置超时时间可以避免应用因等待响应而冻结。 3. **输入/输出流处理**:连接成功后,我们可以获取Socket的输入...

    socket——java

    客户端首先创建Socket对象,指定服务器的IP和端口,然后调用`connect(SocketAddress)`方法发起连接请求。服务器端的ServerSocket监听到请求后,通过`accept()`方法接收连接,此时服务器和客户端建立起TCP连接。 4....

    三步学会Java Socket编程

    ### 三步学会Java Socket编程 #### 一、Socket编程基础概述 Socket编程是一种非常重要的技术,被广泛应用于网络通信领域。它允许不同计算机上的进程通过网络进行数据交换。在Java中,`Socket`和`ServerSocket`是...

    JAVA实现基于Tcp协议的简单Socket通信实例

    【Java实现基于TCP协议的简单Socket通信实例】 在Java中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。Socket是Java中实现网络通信的基本接口,它允许两台计算机通过TCP/IP进行通信...

    java_socket服务端和客户端编程[借鉴].pdf

    - 客户端:创建Socket,指定服务器地址和端口,通过`Socket#connect(SocketAddress)`建立连接,获取输入输出流进行数据交互。 - 服务器端:创建ServerSocket,指定监听端口,调用`ServerSocket#accept()`接收客户端...

    ts-core-socket:套接字的类和实用程序

    在`ts-core-socket`中,这些信息可能被封装在一个`SocketAddress`类中,以便更方便地管理和传递。 3. **连接管理**:包括建立连接(`connect()`)、断开连接(`disconnect()`)和连接状态检测。在TypeScript中,...

    network-packet-linux:Haskell软件包,用于与AF_PACKET套接字一起使用

    从版本3.0.0开始,程序包提供了一个 ,该是根据SocketAddress类型类实现的。 network-packet-linux提供了一个名为SockAddrLl的SocketAddress实例,该实例表示一个sockaddr_ll 。用法有关完整的示例文件,请参见 。 ...

Global site tag (gtag.js) - Google Analytics