記錄mini-task--代理郵件發收系統的開發過程(一)

pengfoo發表於2012-08-18

2012年8月18日

今天,看著書突然萌生了一個idea,開發個mini-task玩玩,通過這樣實踐起來學習應該更快些,而且很有趣。初步決定做個簡單的代理郵件傳送系統(接收,放後面有時間再做)。版本一的需求就這樣:畫一個網頁,弄幾個框,分別有代理郵箱,代理郵箱密碼,郵件主題,正文,傳送按鈕組成。當自己輸入自己的代理郵箱以及密碼,然後填好郵件主題,寫好正文,點選傳送,則能夠正確傳送郵件。

可行性分析:自己用C寫過原始的socket,模擬SMTP協議,成功傳送過郵件。自己具備入門級的Web開發知識和Java基礎,可以動手嘗試。廢話少說,等看完李剛的瘋狂java講義,重點了解下Java網路程式設計,自己就來動手寫。

2012年8月19日

因為發郵件程式涉及到網路程式設計,原來只學過C網路程式設計,所以對Java網路程式設計也要學習下。通過部落格上陳躍峰的部落格:Java程式設計那些事兒103——網路程式設計技術2對Java網路程式設計有了個瞭解。下面的傳送和接收程式也是照搬過來的。

客戶端程式:

package fp;

import java.io.*;

import java.net.*;

/**
 *
 * 簡單的Socket客戶端
 *
 * 功能為:傳送字串“Hello”到伺服器端,並列印出伺服器端的反饋
 */

public class SimpleSocketClient {

 public static void main(String[] args) {

  Socket socket = null;

  InputStream is = null;

  OutputStream os = null;

  // 伺服器端IP地址

  String serverIP = "127.0.0.1";

  // 伺服器端埠號

  int port = 10000;

  // 傳送內容

  String data = "Hello";

  try {

   // 建立連線

   socket = new Socket(serverIP, port);

   // 傳送資料

   os = socket.getOutputStream();

   os.write(data.getBytes());

   // 接收資料

   is = socket.getInputStream();

   byte[] b = new byte[1024];

   int n = is.read(b);

   // 輸出反饋資料

   System.out.println("伺服器反饋:" + new String(b, 0, n));

  } catch (Exception e) {

   e.printStackTrace(); // 列印異常資訊

  } finally {

   try {

    // 關閉流和連線

    is.close();

    os.close();

    socket.close();

   } catch (Exception e2) {
   }

  }

 }

}


伺服器端程式:

package fp;

import java.io.*;

import java.net.*;

/**
 *
 * echo伺服器
 *
 * 功能:將客戶端傳送的內容反饋給客戶端
 */

public class SimpleSocketServer {

 public static void main(String[] args) {

  ServerSocket serverSocket = null;

  Socket socket = null;

  OutputStream os = null;

  InputStream is = null;

  // 監聽埠號

  int port = 10000;

  try {

   // 建立連線

   serverSocket = new ServerSocket(port);

   // 獲得連線

   socket = serverSocket.accept();

   // 接收客戶端傳送內容

   is = socket.getInputStream();

   byte[] b = new byte[1024];

   int n = is.read(b);

   // 輸出

   System.out.println("客戶端傳送內容為:" + new String(b, 0, n));

   // 向客戶端傳送反饋內容

   os = socket.getOutputStream();

   os.write(b, 0, n);

  } catch (Exception e) {

   e.printStackTrace();

  } finally {

   try {

    // 關閉流和連線

    os.close();

    is.close();

    socket.close();

    serverSocket.close();

   } catch (Exception e) {
   }

  }

 }

}

這是對簡單的回顯程式,先執行服務程式,再執行客戶程式。客戶端傳送hello到服務端並被回顯。服務端控制檯顯示:客戶端傳送內容為:Hello  。在客戶端的控制檯顯示:伺服器反饋:Hello 。

後續參見部落格:記錄我的郵箱收發系統開發過程(二) 

相關文章