Java进阶5:网络编程和发送邮件

网络编程

  • 网络编程是指编写运行在多个设备上的程序,这些设备通过网络连接
  • java.net包中提供了TCP、UDP包
socket编程
  • 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。
TCP客户端的实现
import java.io.*;
import java.net.*;

public class tcpserver extends Thread {
    private ServerSocket serverSocket;
    public tcpserver(int port) throws IOException{
        serverSocket = new ServerSocket(port);
        serverSocket.setSoTimeout(10000);
    }
    public void run()
    {
        while(true)
        {
            try
            {
                System.out.println("等待远程连接,端口号为:" + serverSocket.getLocalPort() + "...");
                Socket server = serverSocket.accept();
                System.out.println("远程主机地址:" + server.getRemoteSocketAddress());
                DataInputStream in = new DataInputStream(server.getInputStream());
                System.out.println(in.readUTF());
                DataOutputStream out = new DataOutputStream(server.getOutputStream());
                out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress() + "\nGoodbye!");
                server.close();
            }catch(SocketTimeoutException s)
            {
                System.out.println("Socket timed out!");
                break;
            }catch(IOException e)
            {
                e.printStackTrace();
                break;
            }
        }
    }
    public static void main(String [] args)
    {
        int port = 8888;
        try
        {
            Thread t = new tcpserver(port);
            t.run();
        }catch(IOException e)
        {
            e.printStackTrace();
        }
    }
}
TCP客户端的实现
import java.io.*;
import java.net.*;

public class tcpclient {
    String serverName = "127.0.0.1";
    Integer port = 8888;
    public void connect(){
        try{
            System.out.println("Connnecting to "+serverName +":"+port.toString());
            //创建连接
            Socket client = new Socket(serverName, port);
            System.out.println("Remote Host Address"+client.getRemoteSocketAddress());
            OutputStream newOutPutStream = client.getOutputStream();
            DataOutputStream outData = new DataOutputStream(newOutPutStream);
            outData.writeUTF("Hello from " + client.getLocalAddress());
            InputStream newInputStream = client.getInputStream();
            DataInputStream inputData = new DataInputStream(newInputStream);
            System.out.println("Response: "+inputData.readUTF());
            client.close();
        }catch(IOException err){
            err.printStackTrace();
        }
    }
    public static void main(String[] args){
        tcpclient cli = new tcpclient();
        cli.connect();
    }
}

发送邮件

  • 需要先安装JavaMail API和Java Activation Framework(JAF)
  • 从官网下载
  • 把mail.jar和activation.jar添加到CLASSPATH中
发送一封简单的邮件
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class mail {
    public void sendmail(){
        // 收件人电子邮箱
        String to = "abcd@gmail.com";

        // 发件人电子邮箱
        String from = "web@gmail.com";

        // 指定发送邮件的主机为 localhost
        String host = "localhost";

        // 获取系统属性
        Properties properties = System.getProperties();

        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);

        // 获取默认session对象
        Session session = Session.getDefaultInstance(properties);

        try{
            // 创建默认的 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);

            // Set From: 头部头字段
            message.setFrom(new InternetAddress(from));

            // Set To: 头部头字段
            message.addRecipient(Message.RecipientType.TO,
                    new InternetAddress(to));

            // Set Subject: 头部头字段
            message.setSubject("This is the Subject Line!");

            // 设置消息体
            message.setText("This is actual message");

            // 发送消息
            Transport.send(message);
            System.out.println("Sent message successfully....");
        }catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值