欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Socket類以及ServerSocket類的實(shí)例講解

 更新時間:2017年09月21日 08:18:34   作者:半城楓葉半城雨丶  
下面小編就為大家?guī)硪黄赟ocket類以及ServerSocket類的實(shí)例講解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Socket類

套接字是網(wǎng)絡(luò)連接的端點(diǎn),套接字使應(yīng)用可以從網(wǎng)絡(luò)中讀取數(shù)據(jù),可以向網(wǎng)絡(luò)中寫入數(shù)據(jù)。不同計(jì)算機(jī)上的兩個應(yīng)用程序可以通過連接發(fā)送或接收字節(jié)流,以此達(dá)到相互通信的目的。

為了從一個應(yīng)用程序向另一個應(yīng)用程序發(fā)送消息,需要知道另一個應(yīng)用程序中套接字的 IP 地址和端口號,在java中,套接字由java.net.Socket 表示。

要創(chuàng)建一個套接字,可以使用Socket類中眾多構(gòu)造函數(shù)中的一個。其中一個構(gòu)造函數(shù)接收兩個參數(shù):主機(jī)號和端口號。

public Socket (String host, int port)

其中參數(shù)host是遠(yuǎn)程主機(jī)的名稱或IP地址,參數(shù)port是連接遠(yuǎn)程應(yīng)用程序的端口號,例如,想要通過80端口連接yahoo.com,可以使用如下語句創(chuàng)建Socket對象

new Socket ("yahoo.com", 80);

一旦成功創(chuàng)建了Socket類的實(shí)例,就可以使用該實(shí)例發(fā)送或接收字節(jié)流,要發(fā)送字節(jié)流,需要調(diào)用Socket類的getOutputStream() 方法獲取一個java.io.OutputStream對象,

要發(fā)送文本到遠(yuǎn)程應(yīng)用程序,通常需要使用返回的OutputStream對象創(chuàng)建一個java.io.PrintWriter對象。若想要從連接的另一端接收字節(jié)流,需要調(diào)用Socket類的getInputStream()

方法,該方法會返回一個java.io.InputStream對象。

下面的代碼創(chuàng)建了一個套接字,用于與本地Http服務(wù)器進(jìn)行通信,發(fā)送HTTP請求,接收服務(wù)器的相應(yīng)信息,以下代碼創(chuàng)建了一個StringBuffer對象來保存信息,并輸出。

Socket socket = new Socket("127.0.0.1", "8080");
OutputStream os = socket.getOutputStream();
boolean autoflush = true;
PrintWriter out = new PrintWriter(
 socket.getOutputStream(), autoflush);

BufferedReader in = new BufferedReader(
 new InputStreamReader(socket.getInputStream()));
//send an HTTP request to the web server
out.println("GET /index.jsp HTTP/1.1");
out.println("Host: localhost:8080");
out.println("Connection Close");
out.println();

//read the response
boolean loop = true;
StringBuffer sb = new StringBuffer(8096);
while (loop) {
   if (in.ready()) {
    int i = 0;
    while (i != -1){
     i = in.read();
     sb.append((char) i);
    }
    loop = flase;
   }
   Thread.currentThread().sleep(50);
  }
System.out.println(sb.toString());
socket.close();

ServerSocket類

Socket類表示一個客戶端套接字,即,當(dāng)想要連接遠(yuǎn)程服務(wù)器應(yīng)用程序時創(chuàng)建的套接字。但如果你想要實(shí)現(xiàn)一個服務(wù)器應(yīng)用程序(例如一個HTTP服務(wù)器或FTP服務(wù)器),

你需要另一種方法,因?yàn)榉?wù)器必須時刻待命,它并不知道客戶端應(yīng)用程序會在什么時候發(fā)起連接,正因?yàn)槿绱耍枰褂胘ava.net.ServerSocket類。這是服務(wù)器套接字的實(shí)現(xiàn)。

ServerSocket類和Socket類并不相同,服務(wù)器套接字要等待來自客戶端的連接請求,當(dāng)服務(wù)器套接字收到了連接請求后,它會創(chuàng)建一個Socket實(shí)例來處理與客戶端的通信。

要創(chuàng)建一個服務(wù)器套接字,可以使用ServerSocket類提供的4個構(gòu)造函數(shù)中的任意一個,需要指明IP地址和服務(wù)器套接字偵聽的端口號,典型情況下,IP地址可以為127.0.0.1,

即服務(wù)器套接字會偵聽本地機(jī)器接收到的連接請求,服務(wù)器套接字偵聽的IP地址稱為綁定地址。服務(wù)器套接字的另一個重要屬性是backlog,后者表示在服務(wù)器拒絕接收傳入的

請求之前,傳入的連接請求的最大隊(duì)列長度。

ServerSocket類的其中一個構(gòu)造函數(shù)的簽名如下:

public ServerSocket (int port, int backLog, InetAddress bindingAddress);

值得注意的是,在這個構(gòu)造函數(shù)中,參數(shù)綁定地址必須是java.net.InetAddress類的實(shí)例。創(chuàng)建InetAddress對象的一種簡單方法是調(diào)用其靜態(tài)方法getByName(),

傳入包含主機(jī)名的字符串,代碼如下所示:

InetAddress.getByName("127.0.0.1");

下面的一行代碼創(chuàng)建了一個ServerSocket對象,ServerSocket對象偵聽本地主機(jī)的8080端口,其backlog值為1;

new ServerSocket(8080, 1, InetAddress.getByName("127.0.01"));

創(chuàng)建了ServerSocket實(shí)例后,可以使其等待傳入的連接請求,該連接請求會通過服務(wù)器套接字偵聽的端口上綁定地址傳入,這些工作可以通過調(diào)通ServerSocket類的accept方法

完成。只有當(dāng)接收到連接請求后,該方法才會返回,其返回值是一個Socket實(shí)例,然后,就可以如上所述使用該Socket對象與客戶端應(yīng)用程序進(jìn)行字節(jié)流的發(fā)送/接收。

以上這篇基于Socket類以及ServerSocket類的實(shí)例講解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用流程詳細(xì)介紹

    SpringCloud使用Feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用流程詳細(xì)介紹

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-02-02
  • Java正則表達(dá)式的替換和分組功能

    Java正則表達(dá)式的替換和分組功能

    這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式的替換和分組功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java實(shí)現(xiàn)導(dǎo)出pdf格式文件的示例代碼

    Java實(shí)現(xiàn)導(dǎo)出pdf格式文件的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)導(dǎo)出pdf格式文件的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • java并發(fā)編程專題(九)----(JUC)淺析CyclicBarrier

    java并發(fā)編程專題(九)----(JUC)淺析CyclicBarrier

    這篇文章主要介紹了java CyclicBarrier的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 兩種java文件上傳實(shí)例講解

    兩種java文件上傳實(shí)例講解

    這篇文章主要為大家詳細(xì)介紹了兩種java文件上傳實(shí)例,一種是附件上傳,另一種是上傳簡歷功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java?spring?MVC環(huán)境中實(shí)現(xiàn)WebSocket的示例代碼

    Java?spring?MVC環(huán)境中實(shí)現(xiàn)WebSocket的示例代碼

    這篇文章主要介紹了Java?spring?MVC環(huán)境中實(shí)現(xiàn)WebSocket,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 在Java中實(shí)現(xiàn)線程安全的單例模式的常見方式

    在Java中實(shí)現(xiàn)線程安全的單例模式的常見方式

    單例模式是一種常用的軟件設(shè)計(jì)模式,它確保一個類只有一個實(shí)例,并提供一個全局訪問點(diǎn),在多線程環(huán)境下,確保單例模式的線程安全性是非常重要的,因?yàn)槎鄠€線程可能會同時嘗試創(chuàng)建實(shí)例,導(dǎo)致實(shí)例不唯一的問題,本文介紹了在Java中實(shí)現(xiàn)線程安全的單例模式有幾種常見的方式
    2024-09-09
  • 詳解SpringBoot的Run方法

    詳解SpringBoot的Run方法

    本文給大家介紹了SpringBoot的Run方法,文中通過實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-10-10
  • 詳解三種java實(shí)現(xiàn)多線程的方式

    詳解三種java實(shí)現(xiàn)多線程的方式

    數(shù)據(jù)時代的到來,多線程一直都是比較關(guān)心的問題之一,這篇文章介紹了JAVA實(shí)現(xiàn)多線程的三種方法,有需要的朋友可以參考一下
    2015-08-08
  • java中TreeMap集合的常用方法詳解

    java中TreeMap集合的常用方法詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于java中TreeMap集合的常用方法詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。下面我們就來學(xué)習(xí)一下吧
    2021-11-11

最新評論