top
Loading...
Java網絡編程之傳輸控制協議(三)


五、建立TCP客戶端

討論了套接字類的功能后,我們將分析一個完整的TCP客戶端程序。此處我們將看到的客戶端程序是一個daytime客戶端,它連接到一個daytime服務器程序以讀取當前的日期和時間。建立套接字連接并讀取信息是一個相當簡單的過程,只需要少量的代碼。默認情況下daytime服務運行在13端口上。并非每臺計算機都運行了daytime服務器程序,但是Unix服務器是客戶端運行的很好的系統。如果你沒有訪問Unix服務器的權限,在第七部分我們給出了TCP daytime服務器程序代碼--有了這段代碼客戶端就可以運行了。

DaytimeClient的代碼

import java.net.*
import java.io.*;

public class DaytimeClient
{
public static final int SERVICE_PORT = 13;

public static void main(String args[])
{
// 檢查主機名稱參數
if (args.length != 1)
{
System.out.println ("Syntax - DaytimeClient host");
return;
}

// 獲取服務器程序的主機名稱
String hostname = args[0];

try
{
// 獲取一個連接到daytime服務的套接字
Socket daytime = new Socket (hostname,
SERVICE_PORT);

System.out.println ("Connection established");

// 在服務器程序停止的情況下設置套接字選項
daytime.setSoTimeout ( 2000 );

// 從服務器程序讀取信息
BufferedReader reader = new BufferedReader (
new InputStreamReader
(daytime.getInputStream()
));

System.out.println ("Results : " +
reader.readLine());

// 關閉連接
daytime.close();
}
catch (IOException ioe)
{
System.err.println ("Error " + ioe);
}
}
}

DaytimeClient是如何工作的

Daytime應用程序是很容易理解的,它使用了文章前面談到的概念。建立套接字、獲取輸入流,在很少的事件中(在連接時像daytime一樣簡單的服務器程序失敗)激活超時設置。不是連接已篩選過的流,而是把有緩沖的讀取程序連接到套接字輸入流,并且把結果顯示給用戶。最后,在關閉套接字連接后客戶端終止。這是你可能得到的最簡單的套接字應用程序了--復雜性來自實現的網絡協議,而不是來自具體網絡的編程。

運行DaytimeClient

運行上面的應用程序很簡單。簡單地把運行daytime服務的計算機的主機名稱作為命令行參數指定并運行它就可以了。如果daytime服務器程序使用了非標準的端口號(在后面會討論),記得需要改變端口號并重新編譯。

例如,如果服務器程序在本機上,為了運行客戶端將使用下面的命令:

java DaytimeClient localhost

注意

Daytime服務器程序必須正在運行中,否則該客戶端程序將不能建立連接。例如如果你正在使用Wintel系統而不是Unix,那么你需要運行DaytimeServer(后面會談到)。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗