欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Java培訓(xùn)分享Java Socket編程-重復(fù)和并發(fā)服務(wù)器

2018-06-14 11:53:10 1415瀏覽

本篇文章扣丁學(xué)堂Java培訓(xùn)小編主要是和大家分享一下Java Socket編程-重復(fù)和并發(fā)服務(wù)器,文章中會列出具體的代碼供大家參考,對此感興趣的小伙伴就隨小編一起來看一下吧。



扣丁學(xué)堂Java培訓(xùn)分享Java Socket編程-重復(fù)和并發(fā)服務(wù)器



重復(fù)和并發(fā)服務(wù)器:


這個應(yīng)用程序被當作一個重復(fù)的服務(wù)器.因為它只有在處理完一個進程以后才會接受另一個連接.更多的復(fù)雜服務(wù)器是并發(fā)的,它為每一個請求分配一個線程,而不是來一個處理一個,所以看起來它在同時處理多人請求,所有的商業(yè)的服務(wù)器都是并發(fā)的服務(wù)器。



Java數(shù)據(jù)報類:


不像面向連接的類,數(shù)據(jù)報的客戶端和服務(wù)器端的類在表面上是一樣的,下面的程序建立了一個客戶和服務(wù)器商的數(shù)據(jù)報sockets:


DatagramSocket serverSocket = new DatagramSocket( 4545 );

DatagramSocket clientSocket = new DatagramSocket();



服務(wù)器用參數(shù)4545來指定端口號,由于客戶端將要呼叫服務(wù)器,客戶端可以利用可利用的端口。如果省略第二個參數(shù),程序會讓操作系統(tǒng)分配一個可用的端口,客戶端可以請求一個指定的端口,但是如果其它的應(yīng)用程序已經(jīng)綁定到這個端口之上,請求將會失敗,如果你的意圖不是作為一個服務(wù)器,最好不要指定端口。


由于流不能由交談得到,那么我么如何與一個數(shù)據(jù)報Socket進行對話,答案在于數(shù)據(jù)報類。



接收數(shù)據(jù)報:


DatagramPacket類是用來通過DatagramSocket類接收和發(fā)送數(shù)據(jù)的類,packet類包括了連接信息和數(shù)據(jù)。就如前面所說的一樣,數(shù)據(jù)報是自身獨立的傳輸單元.DatagramPacket類壓縮了這些單元。下面的程序表示了用一個數(shù)據(jù)報socket來接收數(shù)據(jù):


DatagramPacket packet = new DatagramPacket(new byte[512], 512); clientSocket.receive(packet);

clientSocket.receive(packet);


packet的構(gòu)建器需要知道將得到的數(shù)據(jù)放在哪兒,一個512字節(jié)的緩存被建立并且作為構(gòu)建器的第二個參數(shù).每二個構(gòu)建器參數(shù)是緩存的大小,就像ServerSocket類的accept()方法一樣,receive()方法在數(shù)據(jù)可用之前將會阻塞。



發(fā)送數(shù)據(jù)報:


發(fā)送數(shù)據(jù)報是非常地簡單地,所有需要的只是一個地址,地址是由InetAddress類來建立的。這個類沒有公共的構(gòu)建器,但是它有幾個static的方法,可以用來建立這個類的實例。下面的列表列出了建立InetAddress類的實例的方法:


Public InetAddress Creation Methods;

InetAddress getByName(String host);

InetAddress[] getAllByName(String host);

InetAddress getLocalHost();



得到本地主機的地址是非常地有用的,只有前面兩個方法是用來發(fā)送數(shù)據(jù)包的。getByName()和getAllByName()需要目的主機的地址。第一個方法僅僅只是返回第一個符合條件的東西,第二個方法是必須的,因為一臺計算機可能有多個地址.在這種情況下,這臺計算機被稱為multi-homed。



所有的建立的方法都被標記為static.它們必須像下面這樣得到調(diào)用:


InetAddress addr1 = InetAddress.getByName("merlin");

InetAddress addr2[] = InetAddress.getAllByName("merlin");

InetAddress addr3 = InetAddress.getLocalHost();



所有的這些調(diào)用都可以擲出一個UnknownHostException違例,如果一臺計算機沒有連接上DNS服務(wù)器,或者主機的確沒有找到,這個違例就會被擲出。如果一臺計算機沒有一個激活的TCP/IP配置,getLocalHost()也為失敗并擲出一個違例。


一旦一個地址被確定了,數(shù)據(jù)報就可以被送出了。下面的程序傳輸了一個字符串給目的socket:


String toSend = "This is the data to send!");

byte[] sendbuf = new byte[ toSend.length() ];

toSend.getBytes( 0, toSend.length(), sendbuf, 0 );

DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,

addr, port);

clientSocket.send( sendPacket );



首先,字符串必須被轉(zhuǎn)換成一個字節(jié)數(shù)組.然后,一個新的DatagramPacket實例必須被建立.注意構(gòu)建器的最后兩個參數(shù)。因為要發(fā)送一個包,所以地址和端口必須被給定,一個applet可能可以知道它的服務(wù)器的地址,但是服務(wù)器如何知道它的客戶機的地址呢。當任何一個包被收到后,返回的地址和端口會被解壓出來,并通過getAddress()和getPort()方法得到。這就是一個服務(wù)器如何回應(yīng)一個客戶端的包:


DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,

recvPacket.getAddress(), recvPacket.getPort() );

serverSocket.send( sendPacket );



不像面向連接的操作,數(shù)據(jù)報服務(wù)器服務(wù)器其實比數(shù)據(jù)報客戶端更簡單:


數(shù)據(jù)報服務(wù)器


一個數(shù)據(jù)報服務(wù)器的基本步驟:


1、在一個指定的端口上建立一個數(shù)據(jù)報socket.


2、用receive方法等待進來的包.


3、用特定的協(xié)議來回應(yīng)收到的包.


4、回到第二步或繼續(xù)第二步.


5、關(guān)閉數(shù)據(jù)報socket.


列表9.3演示了一人簡單的數(shù)據(jù)報回應(yīng)服務(wù)器.它將回應(yīng)它收到的包.


列表9.3.一個簡單的數(shù)據(jù)報回應(yīng)服務(wù)器


import java.io.*;

import java.net.*;

public class SimpleDatagramServer

{

public static void main(String[] args)

{

DatagramSocket socket = null;

DatagramPacket recvPacket, sendPacket;

try

{

socket = new DatagramSocket(4545);

while (socket != null)

{

recvPacket= new DatagramPacket(new byte[512], 512);

socket.receive(recvPacket);

sendPacket = new DatagramPacket(

recvPacket.getData(), recvPacket.getLength(),

recvPacket.getAddress(), recvPacket.getPort() );

socket.send( sendPacket );

}

}

catch (SocketException se)

{

System.out.println("Error in SimpleDatagramServer: " + se);

}

catch (IOException ioe)

{

System.out.println("Error in SimpleDatagramServer: " + ioe);



關(guān)于Java Socket編程-重復(fù)和并發(fā)服務(wù)器扣丁學(xué)堂Java在線學(xué)習小編就先給大家介紹這些,希望對小伙伴們有所幫助,想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)咨詢??鄱W(xué)堂是專業(yè)的Java培訓(xùn)機構(gòu),不僅有專業(yè)的老師和與時俱進的課程體系,還有大量的Java在線視頻供學(xué)員觀看學(xué)習哦。Java技術(shù)交流群:670348138。


扣丁學(xué)堂微信公眾號

【關(guān)注微信公眾號獲取更多學(xué)習資料】



查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>



標簽: 扣丁學(xué)堂Java培訓(xùn) Java Socket編程-重復(fù)和并發(fā)服務(wù)器 Java培訓(xùn) Java基礎(chǔ)教程 Java學(xué)習視頻 Java教學(xué)視頻 java入門教程 Java教程視頻 java在線學(xué)習 java在線視頻 java在線教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部