import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 发送普通邮件,接受普通邮件 发送带有附件的邮件,接收带有附件的邮件 发送html形式的邮件,接受html形式的邮件 发送带有图片的邮件等做了一个总结。
*/
public class Test {
static int port=25;
static String server="smtp.qq.com";
static String from="****@qq.com";
static String user="****";
static String password="******";
public static void main(String[] args)
{
sendEmail("***@foxmail.com", "test", "test");
}
public static void sendEmail(String email,String subject,String body){
try{
Properties props=new Properties();
props.put("mail.smtp.host",server);
props.put("mail.smtp.port",String.valueOf(port));
props.put("mail.smtp.auth","true");//验证
Transport transport=null;
MyAuthenticator myauth = new MyAuthenticator(from, password);
Session session=Session.getDefaultInstance(props,myauth);
session.setDebug(true);
transport=session.getTransport("smtp");
transport.connect(server,user,password);
MimeMessage msg=new MimeMessage(session);
msg.setSentDate(new Date());
InternetAddress fromAddress=new InternetAddress(from);
msg.setFrom(fromAddress);
InternetAddress[] toAddress=new InternetAddress[1];
toAddress[0]=new InternetAddress(email);
msg.setRecipients(Message.RecipientType.TO,toAddress);
msg.setSubject(subject);
msg.setText(body);
msg.saveChanges();
transport.sendMessage(msg,msg.getAllRecipients());//System.out.print("ok");
//Transport.send(msg);
}catch(NoSuchProviderException e){
e.printStackTrace();
}catch(MessagingException e){
e.printStackTrace();
}
}
}
class MyAuthenticator extends javax.mail.Authenticator {
private String strUser;
private String strPwd;
public MyAuthenticator(String user, String password) {
this.strUser = user;
this.strPwd = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(strUser, strPwd);
}
}
SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。
那么在UI的主线程中更新画面 可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。那么将无法响应按键,触屏等消息。
当使用surfaceView 由于是在新的线程中更新画面所以不会阻塞你的UI主线程。但这也带来了另外一个问题,就是事件同步。比如你触屏了一下,你需要surfaceView中thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。
所以基于以上,根据游戏特点,一般分成两类。
1 被动更新画面的。比如棋类,这种用view就好了。因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。 因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。
2 主动更新。比如一个人在一直跑动。这就需要一个单独的thread不停的重绘人的状态,避免阻塞main UI thread。所以显然view不合适,需要surfaceView来控制。
ipv6是ipv4的升级版 它拥有更多的IP地址
一:
IPv4地址也时常以一组4个2位的十六进制整数或4个8位的二进制整数表示,但后一种情况较少见。
4×8 = 32 201.199.244.101
4个字段 每个4byte
二:
表达式一:
IPV6优先选用的形式是 X:X:X:X:X:X:X:X ,其中X是1个16位地址段的十六进制值。例如:
8个字段 每个4个4byte 8×4×4 = 128
FEDC:BA98:7654:4210:FEDC:BA98:7654:3210
表达式二:
会发生包含长串0位的地址。为了简化包含0位地址的书写,可以使用“::”符号简化多个0位的16位组。“::
”符号在一个地址中只能出现一次。该符号也可以用来压缩地址中前部和尾部的0。举例如下:
FF01:0:0:0:0:0:0:101 多点传送地址
0:0:0:0:0:0:0:1 回送地址
可用下面的压缩形式表示:
FF01::101 多点传送地址
::1 回送地址
ip 实际地址:
192.168.1.107
fe80::5efe:192.168.1.108%2
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class MyTest {
/**
* @param args
* @CreateDate:2012-3-12
* @author
* @throws UnknownHostException
*/
public static void main(String[] args) throws UnknownHostException {
// TODO Auto-generated method stub
MyTest t = new MyTest();
// ipv4地址
// t.ipv6("www.163.com");
// ipv6地址
// t.ipv6("www.neu6.edu.cn");
t.ipv6("fe80::5efe:192.168.1.108%2");
}
public void ipv6(String ip) throws UnknownHostException{
if (ip.length() == 0)
{
return;
}
InetAddress address = InetAddress.getByName(ip);
System.out.println("IP: " + address.getHostAddress());
switch (address.getAddress().length)
{
case 4:
System.out.println("根据byte数组长度判断这个IP地址是IPv4地址!");
break;
case 16:
System.out.println("根据byte数组长度判断这个IP地址是IPv6地址!");
break;
}
if (address instanceof Inet4Address)
System.out.println("使用instanceof判断这个IP地址是IPv4地址!");
else if (address instanceof Inet6Address)
System.out.println("使用instanceof判断这个IP地址是IPv6地址!");
}
}