2018-06-12 14:10:08 1358瀏覽
關(guān)于Java Socket編程Java面向連接的類我們上篇文章扣丁學(xué)堂Java在線學(xué)習(xí)小編已經(jīng)給大家介紹了Java面向連接的類,本篇文章繼續(xù)為小伙伴講解。
列表9.1列出了一個簡單的客戶端的程序.它向一個服務(wù)器發(fā)出一個請求,取回一個HTML文檔,并把它顯示在控制臺上.
9.1一個簡單的socket客戶端
import java.io.*;
import java.net.*;
/**
* 一個簡單的從服務(wù)器取回一個HTML頁面的程序
* 注意:merlin是本地機(jī)器的名字
*/
public class SimpleWebClient {
public static void main(String args[])
{
try
{
// 打開一個客戶端socket連接
Socket clientSocket1 = new Socket("merlin", 80);
System.out.println("Client1: " + clientSocket1);
// 取得一個網(wǎng)頁
getPage(clientSocket1);
}
catch (UnknownHostException uhe)
{
System.out.println("UnknownHostException: " + uhe);
}
catch (IOException ioe)
{
System.err.println("IOException: " + ioe);
}
}
/**
*通過建立的連接請求一個頁面,顯示回應(yīng)然后關(guān)閉socket
*/
public static void getPage(Socket clientSocket)
{
try
{
// 需要輸入和輸出流
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStream() );
// 向服務(wù)器發(fā)出HTTP請求
outbound.writeBytes("GET / HTTP/1.0\r\n\r\n");
// 讀出回應(yīng)
String responseLine;
while ((responseLine = inbound.readLine()) != null)
{
// 把每一行顯示出來
System.out.println(responseLine);
if ( responseLine.indexOf("") != -1 )
break;
}
// 清除
outbound.close();
inbound.close();
clientSocket.close();
}
catch (IOException ioe)
{
System.out.println("IOException: " + ioe);
}
}
}
回憶一個,一個客戶端向一個正在監(jiān)聽的服務(wù)器socket發(fā)出一個連接.客戶端的sockets是用Socket類建立的.下面的程序建立了一個客戶端的socket并且連接到了一個主機(jī):
Socket clientSocket = new Socket("merlin", 80);
第一個參數(shù)是你想要連接的主機(jī)的名稱,第二個參數(shù)是端口號.一個主機(jī)名稱指定了目的的名稱.端口號指定了由哪個應(yīng)用程序來接收.在我們的情況下,必須指定80,因?yàn)樗悄J(rèn)的HTTP協(xié)議的端口.另外的知名的端口列在表9.1中,看:
知名的端品:
echo 7
daytime 13
daytime 13
ftp 21
telnet 23
smtp 25
finger 79
http 80
pop3 110
因?yàn)镾ocket類是面向連接的,它提供了一個可供讀寫的流接口.java.io包中的類可以用來訪問一個已連接的socket:
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream( clientSocket.getInputStream()
);
一旦流建立了,一般的流操作就可以做了:
outbound.writeBytes("GET / HTTP/1.0\r\n\r\n);
String responseLine;
while ( (responseLine = inbound.readLine()) != null)
{
System.out.println(responseLine);
}
以上的小程序請求了一個WEB頁面并且把它顯示出來.當(dāng)程序完成之后,連接必須關(guān)閉.
outbound.close();
inbound.close();
clientSocket.close();
注意socket流必須首先關(guān)閉.所有的的socket流必須在socket關(guān)閉之前關(guān)閉.這個小程序非常地簡單,但是所有的客戶端程序都必須遵首下面的基本的步驟:
1.建立客戶端socket連接.
2.得到socket的讀和寫的流.
3.利用流.
4.關(guān)閉流.
5.關(guān)閉socket.
以上就是扣丁學(xué)堂Java培訓(xùn)小編給大家分享的Java Socket編程Java面向連接的類,希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢。扣丁學(xué)堂是專業(yè)的Java培訓(xùn)機(jī)構(gòu),不僅有專業(yè)的老師和與時(shí)俱進(jìn)的課程體系,還有大量的Java在線教程供學(xué)員掛看學(xué)習(xí)哦。扣丁學(xué)堂Java技術(shù)交流群:670348138。
【關(guān)注微信公眾號獲取更多學(xué)習(xí)資料】
查看更多關(guān)于“Java開發(fā)資訊”的相關(guān)文章>>