使用java
連接到服務(wù)器
public static void main(String[] args) throws IOException {try (
Socket socket = new Socket("time-a.nist.gov", 13);
Scanner scanner = new Scanner(socket.getInputStream())
){while (scanner.hasNextLine()) {String line = scanner.nextLine();
System.out.println(line);
}
}
}
設(shè)置超時(shí)時(shí)間
socket.setSoTimeout(10000);
new Socket(host, port)
這個(gè)方法會(huì)一直地阻塞下去,直到建立了到達(dá)主機(jī)地初始連接為止??梢酝ㄟ^(guò)先構(gòu)建一個(gè)無(wú)連接地套接字,然后再使用一個(gè)超時(shí)來(lái)進(jìn)行攔截地方式解決這個(gè)問(wèn)題。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(host, port), timeout);
靜態(tài)地getByName
方法可以返回代表某個(gè)主機(jī)地InetAddress
對(duì)象。如:
InetAddress address = InetAddress.getByName("time-a.nist.gov");
String hostAddress = address.getHostAddress();
如果主機(jī)名對(duì)應(yīng)多個(gè)因特網(wǎng)地址,當(dāng)訪問(wèn)主機(jī)時(shí),隨隨機(jī)選取其中一個(gè),可以通過(guò)getAllByName
方法獲得所有主機(jī)。
InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress : allByName) {System.out.println(inetAddress.getHostAddress());
}
獲取本機(jī)地址
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost.getHostAddress());
服務(wù)器套接字一旦啟動(dòng)了服務(wù)器程序,它便會(huì)等待某個(gè)客戶端連接到它的接口。
ServerSocket serverSocket = new ServerSocket(8189);
用于建立一個(gè)負(fù)責(zé)監(jiān)控端口8189的服務(wù)器
Socket accept = serverSocket.accept();
一旦有人通過(guò)網(wǎng)絡(luò)發(fā)送了正確的連接請(qǐng)求,并以此連接到了端口上,該方法就會(huì)返回一個(gè)表示連接已經(jīng)建立的Socket對(duì)象。我們可以使用這個(gè)對(duì)象來(lái)得到輸入流和輸出流。
InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();
服務(wù)器發(fā)送給服務(wù)器輸出流的所有信息都會(huì)成為哭護(hù)短程序的輸入,同時(shí)來(lái)自客戶端程序的所有輸出都會(huì)被包含在服務(wù)器輸入流中。我們可以將流轉(zhuǎn)換成掃描器和寫入器。
Scanner in = new Scanner(inputStream);
PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream));
完整代碼
public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8189);
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();
Scanner in = new Scanner(inputStream);
PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream), true);
//out.println("ljq");
boolean done = false;
while (!done && in.hasNextLine()) {String line = in.nextLine();
out.println("ljq: " + line);
if (line.trim().equals("no")) done = true;
}
accept.close();
}
半關(guān)閉
套接字連接的一端可以終止其輸出,同時(shí)仍舊可以接收來(lái)自另一端的數(shù)據(jù)??梢酝ㄟ^(guò)關(guān)閉一個(gè)套接字的輸出流來(lái)表示發(fā)送給服務(wù)器的請(qǐng)求數(shù)據(jù)已經(jīng)結(jié)束,但是必須保持輸入流處于打開狀態(tài)。
Socket accept = serverSocket.accept();
accept.shutdownOutput();
獲取web
數(shù)據(jù)URL
和URI
URL
和URLConnection
類封裝了大量復(fù)雜的實(shí)現(xiàn)細(xì)節(jié),這些細(xì)節(jié)涉及如何從遠(yuǎn)程站點(diǎn)獲取信息。
URL url = new URL("urlString");
如果只是想獲得該資源的內(nèi)容,可以使用URL類中的openStream
方法。該方法將產(chǎn)生一個(gè)InputStream
對(duì)象,然后就可以按照一般的用法來(lái)使用這個(gè)對(duì)象了,如下所示:
URL url = new URL("urlString");
InputStream inputStream = url.openStream();
Scanner scanner = new Scanner(inputStream);
java.net
對(duì)URL
(統(tǒng)一資源定位符)和URI
(統(tǒng)一資源標(biāo)識(shí)符)進(jìn)行了非常有用的區(qū)分。
URI
是個(gè)純粹的語(yǔ)法結(jié)構(gòu),包含用來(lái)指定Web
資源的字符串的各種組成部分。URL
是URI
的一個(gè)特例,它包含了用于定位Web
資源的足夠信息。
在java
中URI
類不能用于訪問(wèn)資源,它的唯一作用就是解析。但是,URL
類可以打開一個(gè)連接到資源的流。因此URL
類只能用于那些java
類庫(kù)知道該如何處理的模式,如http
、https
、ftp
等等。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享名稱:Java核心技術(shù)-網(wǎng)絡(luò)-創(chuàng)新互聯(lián)
瀏覽地址:http://bm7419.com/article38/igdpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容