一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 基于Socket類以及ServerSocket類的實例講解

基于Socket類以及ServerSocket類的實例講解

2021-01-07 13:23半城楓葉半城雨丶 Java教程

下面小編就為大家帶來一篇基于Socket類以及ServerSocket類的實例講解。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Socket類

套接字是網絡連接的端點,套接字使應用可以從網絡中讀取數據,可以向網絡中寫入數據。不同計算機上的兩個應用程序可以通過連接發送或接收字節流,以此達到相互通信的目的。

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

要創建一個套接字,可以使用Socket類中眾多構造函數中的一個。其中一個構造函數接收兩個參數:主機號和端口號。

?
1
public Socket (String host, int port)

其中參數host是遠程主機的名稱或IP地址,參數port是連接遠程應用程序的端口號,例如,想要通過80端口連接yahoo.com,可以使用如下語句創建Socket對象

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

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

要發送文本到遠程應用程序,通常需要使用返回的OutputStream對象創建一個java.io.PrintWriter對象。若想要從連接的另一端接收字節流,需要調用Socket類的getInputStream()

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

下面的代碼創建了一個套接字,用于與本地Http服務器進行通信,發送HTTP請求,接收服務器的相應信息,以下代碼創建了一個StringBuffer對象來保存信息,并輸出。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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類表示一個客戶端套接字,即,當想要連接遠程服務器應用程序時創建的套接字。但如果你想要實現一個服務器應用程序(例如一個HTTP服務器或FTP服務器),

你需要另一種方法,因為服務器必須時刻待命,它并不知道客戶端應用程序會在什么時候發起連接,正因為如此,需要使用java.net.ServerSocket類。這是服務器套接字的實現。

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

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

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

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

ServerSocket類的其中一個構造函數的簽名如下:

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

值得注意的是,在這個構造函數中,參數綁定地址必須是java.net.InetAddress類的實例。創建InetAddress對象的一種簡單方法是調用其靜態方法getByName(),

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

?
1
InetAddress.getByName("127.0.0.1");

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

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

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

完成。只有當接收到連接請求后,該方法才會返回,其返回值是一個Socket實例,然后,就可以如上所述使用該Socket對象與客戶端應用程序進行字節流的發送/接收。

以上這篇基于Socket類以及ServerSocket類的實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/xinde123/archive/2017/09/20/7563185.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产射频放大器 | 喜马拉雅听书免费版 | 国产无套在线播放 | 亚洲成人三级 | 成年男人永久免费看片 | 青青草原网| 国产精品四虎在线观看免费 | 天堂成人在线观看 | 91porn最新网址| 特黄特色一级aa毛片免费观看 | 亚洲 另类 欧美 变态屎尿 | 精品视频网站 | 成人福利影院 | 香蕉精品 | 青青青视频免费观看 | 色菇凉天天综合网 | 久久精品亚洲精品国产欧美 | 国产亚洲精aa在线观看香蕉 | 轻轻色在线视频中文字幕 | 久久九九久精品国产尤物 | 无码专区aaaaaa免费视频 | 国产成人一区二区三区影院免费 | 菠萝视频5正版在线观看 | 九9热这里真品 | 日本天堂影院在线播放 | 91污无限制破解安卓2021 | 91探花在线播放 | 香蕉人人超人人超碰超国产 | 狠狠综合视频精品播放 | 香蕉久久久久久狠狠色 | 成人毛片1024你懂的 | 国产一卡2卡3卡四卡国色天香 | 日韩精品 欧美 | 全彩成人18h漫画 | 羞羞一区二区三区四区片 | 太紧太深了受不了黑人 | 亚洲国产精品综合一区在线 | 久久偷拍国2017 | 17个农民工婉莹第一部 | 女女性恋爱视频入口 | 岛国免费大片 |