在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两个版本的最大区别在于附件的提取,不过同名附件无法同时收取的问题还是没有解决。
分享到:
相关推荐
【Android Socket调试助手教程及源码】 Android Socket调试助手是一个实用工具,用于帮助开发者在Android平台上进行网络通信的调试工作,特别是涉及TCP/IP协议的Socket编程。它通过创建和管理Socket连接,允许...
5. **源码解析** Java Socket 的源码是用 C++ 实现的,通过 JNI(Java Native Interface)与 Java 代码交互。在源码中,`SocketImpl` 类是所有 Socket 实现的基础,它定义了诸如 `accept()`, `bind()`, `connect()`...
Socket是Java中用于网络通信的一种基础接口,它提供了一种在网络之间进行双向数据流通信的简单方式。在Java中,Socket类是实现TCP/IP通信的主要工具。以下是对Socket学习笔记的详细解释: 1. **Socket构造方法**: ...
2. **建立连接**:调用`Socket.connect(SocketAddress endpoint, int timeout)`方法连接到服务器。 3. **数据传输**:通过Socket的`OutputStream`发送数据,使用`InputStream`接收数据。例如,可以使用`...
Java的Socket编程是Java网络编程的核心部分,它提供了在TCP/IP协议栈上进行通信的机制。Socket接口是对TCP/IP协议的抽象,使得开发者能够轻松地创建客户端和服务器应用程序,实现网络上的数据交换。在这个主题中,...
本文将深入解析Socket类的构造方法、成员方法以及相关选项,帮助理解如何在Java中使用Socket进行网络通信。 **一、Socket构造方法** 1. `Socket()`:默认构造方法,不立即建立连接,需要后续调用`connect()`方法。...
`Socket.connect(SocketAddress endpoint, int timeout)`方法用于连接服务器,其中`endpoint`参数指定服务器地址,`timeout`参数设定超时时间(以毫秒为单位)。如果`timeout`参数设置为0,则表示永远不会超时,默认...
- `Socket.connect(SocketAddress endpoint, int timeout)`方法用于发起连接请求,可以设置超时时间。 3. **数据传输**: - `Socket`对象提供`InputStream`和`OutputStream`用于读写数据。通常使用`Socket....
Socket通信是计算机网络编程中的重要组成部分,特别是在分布式系统和客户端-服务器架构中。在这个场景下,Android客户端通过Socket与Java服务器进行通信,实现文件的下载功能。以下将详细阐述Socket通信的基本原理、...
Java Socket 简易聊天程序是基于TCP协议实现的一种网络通信工具,主要用于两台或多台计算机之间的数据交换。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了...
- `Socket connect(SocketAddress endpoint)`:客户端调用此方法连接服务器。 - `ServerSocket(int port)`:服务器端创建ServerSocket,指定监听的端口号。 - `InputStream getInputStream()`:获取Socket的输入...
Socket编程是计算机网络通信中的重要概念,它提供了一种进程间通信(IPC)的方式,尤其在分布式系统中,使得运行在不同设备上的程序能够相互通信。本文将深入探讨Socket编程的基本原理、主要步骤以及常见应用。 一...
- `Socket.connect(SocketAddress endpoint)`:客户端的Socket连接到指定的服务器地址。 - `InputStream getInputStream()` 和 `OutputStream getOutputStream()`:获取Socket的数据输入流和输出流,用于读写数据。 ...
2. **建立连接**:调用`Socket.connect(SocketAddress endpoint, int timeout)`方法尝试连接到服务器。设置超时时间可以避免应用因等待响应而冻结。 3. **输入/输出流处理**:连接成功后,我们可以获取Socket的输入...
客户端首先创建Socket对象,指定服务器的IP和端口,然后调用`connect(SocketAddress)`方法发起连接请求。服务器端的ServerSocket监听到请求后,通过`accept()`方法接收连接,此时服务器和客户端建立起TCP连接。 4....
### 三步学会Java Socket编程 #### 一、Socket编程基础概述 Socket编程是一种非常重要的技术,被广泛应用于网络通信领域。它允许不同计算机上的进程通过网络进行数据交换。在Java中,`Socket`和`ServerSocket`是...
【Java实现基于TCP协议的简单Socket通信实例】 在Java中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。Socket是Java中实现网络通信的基本接口,它允许两台计算机通过TCP/IP进行通信...
- 客户端:创建Socket,指定服务器地址和端口,通过`Socket#connect(SocketAddress)`建立连接,获取输入输出流进行数据交互。 - 服务器端:创建ServerSocket,指定监听端口,调用`ServerSocket#accept()`接收客户端...
在`ts-core-socket`中,这些信息可能被封装在一个`SocketAddress`类中,以便更方便地管理和传递。 3. **连接管理**:包括建立连接(`connect()`)、断开连接(`disconnect()`)和连接状态检测。在TypeScript中,...
从版本3.0.0开始,程序包提供了一个 ,该是根据SocketAddress类型类实现的。 network-packet-linux提供了一个名为SockAddrLl的SocketAddress实例,该实例表示一个sockaddr_ll 。用法有关完整的示例文件,请参见 。 ...