1. 程式人生 > >計算機網路daytime實現之java/python/c++版本

計算機網路daytime實現之java/python/c++版本

daytime介紹

有一個有用的除錯工具就是daytime服務。它的作用就是返回當前時間和日期,格式是字串格式。
基於TCP的daytime服務
daytime服務是基於TCP的應用,伺服器在TCP埠13偵聽,一旦有連線建立就返回ASCII形式的日期和時間,在傳送完後關閉連線。接收到的資料被忽略。
基於UDP的daytime服務
daytime服務也可以使用UDP協議,它的埠也是13,不過UDP是用資料報傳送當前時間的。接收到的資料被忽略。

daytime之java實現

程式碼

/**
 * Ubuntu下編寫自己的DAYTIME客戶端,並在網際網路上找一個DAYTIME伺服器連線,
 * 驗證結果,列印程式碼和執行的輸出結果。
 * www.unpbook.com
 */
import java.io.*;
import java.net.*;
public class daytimetest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String sHostName;
		/*
		 * Get the name of the server from the command line. No entry,use
		 * tock.usno.navy.mil
		 */
		if(args.length>0){
			sHostName = args[0];
		}
		else{
			//"www.time.ac.cn" 或 "time.nist.gov"
			sHostName = "time.nist.gov";
		}
		/*
		 * Opeb a socket to port 13. Prepare to receive the Daytime information.
		 */
		try{
			Socket oSocket = new Socket(sHostName,13);
			InputStream oTimeStream =oSocket.getInputStream();
			StringBuffer oTime = new StringBuffer();
			 
			// Fetch the Daytime information.
			int iCharacter;
			while((iCharacter = oTimeStream.read()) != -1){
				oTime.append((char)iCharacter);
			}
			// Convert Daytime to a String and output.
			String sTime = oTime.toString().trim();
			System.out.println("It's:" + sTime + "at " + sHostName + ".");
			oTimeStream.close();
			oSocket.close();
			 
		}catch (UnknownHostException e){
			System.err.print(e);
		}catch (IOException e){
			System.err.print(e);
		}
	}
}

執行截圖
在這裡插入圖片描述

daytime之python實現

程式碼

import socket
HOST = "time.nist.gov"
PORT = 13
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
	client.connect((HOST,PORT))
	data = client.recv(1024)
	#位元組轉字串
	time = str(data,encoding='utf-8')
	print("the server's time is:",time)
except Exception as e:
	print('Error!')

執行截圖
在這裡插入圖片描述

daytime之c++實現

程式碼是從unpbook.com上下載的,已上傳到我的github:https://github.com/inspurer/ComputerNetwork/tree/master/daytime(java%20and%20c%2B%2B)/unpv13e
編譯過程可以參考https://blog.csdn.net/michael_kong_nju/article/details/43272195

執行截圖

服務端
在這裡插入圖片描述客戶端在這裡插入圖片描述

注意事項

在ubuntu下編譯該程式碼需要啟用root模式,具體做法是,開啟一個終端,輸入

sudo passwd root

按照提示輸入兩遍一樣的密碼,設定root使用者的密碼,注意這個密碼和開機密碼不一樣
如果已經啟用,可以輸入

su - 

再輸入你設定的密碼就可以登入root使用者,如果登入之後你不知道怎麼進入指定資料夾,靈活運用pwd(檢視當前目錄)和ls(檢視子目錄),看終端的資訊,一般root後需要cd Desktopcd homecd (yourusername)之類的

按照上面的連結編譯好之後,退出root模式可以用

exit

程式碼更新

daytime程式碼最新在我的githubhttps://github.com/inspurer/ComputerNetwork/tree/master/daytime