亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java Socket編程(四) 重復和并發服務器

2020-01-31 16:52:16
字體:
來源:轉載
供稿:網友
文章來源:aspcn 作者:孫雯

重復和并發服務器

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

Java數據報類

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

DatagramSocket serverSocket = new DatagramSocket( 4545 );
DatagramSocket clientSocket = new DatagramSocket();

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

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

接收數據報

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

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

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

發送數據報

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

Public InetAddress Creation Methods

InetAddress getByName(String host);
InetAddress[] getAllByName(String host);
InetAddress getLocalHost();

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

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

InetAddress addr1 = InetAddress.getByName("merlin");
InetAddress addr2[] = InetAddress.getAllByName("merlin");
InetAddress addr3 = InetAddress.getLocalHost();

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

一旦一個地址被確定了,數據報就可以被送出了.下面的程序傳輸了一個字符串給目的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 );

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

DatagramPacket sendPacket = new DatagramPacket( sendbuf, sendbuf.length,
recvPacket.getAddress(), recvPacket.getPort() );
serverSocket.send( sendPacket );

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

數據報服務器

一個數據報服務器的基本步驟:

1.在一個指定的端口上建立一個數據報socket.

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

3.用特定的協議來回應收到的包.

4.回到第二步或繼續第二步.

5.關閉數據報socket.

列表9.3演示了一人簡單的數據報回應服務器.它將回應它收到的包.

列表9.3.一個簡單的數據報回應服務器

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);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品在线播放| 欧美日韩在线看| 亚洲福利视频网| 91精品视频专区| 日韩中文在线中文网在线观看| 欧美亚洲一区在线| 91精品久久久久久久| 亚洲成人国产精品| 精品呦交小u女在线| 亚洲午夜精品久久久久久久久久久久| 九九热r在线视频精品| 久久久久久久久久久久久久久久久久av| 亚洲精品视频在线播放| 超碰97人人做人人爱少妇| 国产精品白嫩美女在线观看| 韩国精品美女www爽爽爽视频| 欧美亚洲第一页| 亚洲激情在线观看| 日本人成精品视频在线| 韩日欧美一区二区| 日韩在线观看成人| 成人福利视频在线观看| …久久精品99久久香蕉国产| 日本国产欧美一区二区三区| 欧美成人免费小视频| 国产精品入口日韩视频大尺度| 久久久久久久久久av| 亚洲成人激情图| 91精品啪在线观看麻豆免费| 中文字幕在线看视频国产欧美| 成人免费激情视频| 久久夜色精品亚洲噜噜国产mv| 成人黄色影片在线| 欧美性极品xxxx做受| 操91在线视频| 亚洲欧美激情四射在线日| 国产成人精品综合久久久| 亚洲夜晚福利在线观看| 日韩精品在线视频观看| 亚洲综合在线播放| 精品中文字幕在线| 亚洲精品少妇网址| 中文字幕日韩av综合精品| 久久天天躁狠狠躁夜夜爽蜜月| 欧美精品激情blacked18| 狠狠色狠狠色综合日日五| 亚洲欧洲第一视频| 精品中文字幕在线观看| 69av在线视频| 欧美色道久久88综合亚洲精品| 国产精品美女999| 97视频网站入口| 一区二区三区黄色| 欧美性理论片在线观看片免费| 国产精品99久久久久久久久久久久| 国产精品自产拍在线观看中文| 一区二区在线免费视频| 久久久国产精品视频| 国产精品久久久久av免费| 国产精品欧美日韩| 成人做爽爽免费视频| 国产精自产拍久久久久久蜜| 国产精品视频永久免费播放| 2019中文字幕全在线观看| 亚洲性猛交xxxxwww| 97超级碰碰碰久久久| 欧美日韩精品二区| 亚洲图片欧洲图片av| 欧美黄色片免费观看| 欧美大全免费观看电视剧大泉洋| 国产精品久久久久久久久免费看| 清纯唯美亚洲综合| 日韩av毛片网| 国产精品专区第二| 国产欧美一区二区三区四区| 超碰日本道色综合久久综合| 97香蕉超级碰碰久久免费的优势| 国产免费一区二区三区在线观看| 美女国内精品自产拍在线播放| 成人欧美一区二区三区在线| 日韩的一区二区| 日韩在线观看免费高清完整版| 国产精品极品美女粉嫩高清在线| 午夜美女久久久久爽久久| 91精品国产九九九久久久亚洲| 国产视频欧美视频| 亚洲精品国产免费| 国产日本欧美一区| 亚洲精品日韩av| 午夜精品久久久久久久99热浪潮| 伊人成人开心激情综合网| 色综合久久天天综线观看| 久久免费少妇高潮久久精品99| 91地址最新发布| 欧美视频国产精品| 中文字幕v亚洲ⅴv天堂| 久久亚洲私人国产精品va| 久久久午夜视频| 日韩精品极品在线观看播放免费视频| 欧美激情亚洲激情| 俺去了亚洲欧美日韩| 精品国内产的精品视频在线观看| 亚洲久久久久久久久久久| 国产亚洲美女久久| 热久久免费视频精品| 国产不卡在线观看| 日韩av影视在线| 欧美激情在线播放| 国产成人一区二区三区| 欧美成人高清视频| 国产成一区二区| 色偷偷亚洲男人天堂| 欧美诱惑福利视频| 97视频在线播放| 国产精品久久视频| 国产精品视频一区国模私拍| 亚洲成人a**站| 亚洲精品久久久久久久久久久久久| 中国china体内裑精亚洲片| 久久影视免费观看| 国产一区二区三区直播精品电影| 国产成+人+综合+亚洲欧美丁香花| www.亚洲男人天堂| 国产婷婷色综合av蜜臀av| 欧美日韩国产二区| 亚洲免费精彩视频| 久久久噜噜噜久久久| 精品中文字幕在线2019| zzjj国产精品一区二区| 国产日本欧美一区二区三区| 国产91色在线| 日韩中文在线中文网在线观看| 精品在线欧美视频| 日韩美女视频免费在线观看| 黑人极品videos精品欧美裸| 日韩经典中文字幕| 国产69久久精品成人| 亚洲成年人在线播放| 奇米成人av国产一区二区三区| www.日韩系列| 麻豆一区二区在线观看| 欧美激情性做爰免费视频| www高清在线视频日韩欧美| 中文字幕在线看视频国产欧美| 欧美一级淫片aaaaaaa视频| 久久精品视频在线播放| 2024亚洲男人天堂| 亚洲国产精久久久久久久| 欧美视频在线视频| 日本午夜精品理论片a级appf发布| 国产亚洲欧洲高清| 欧美性jizz18性欧美| 91精品国产综合久久香蕉922| 欧洲s码亚洲m码精品一区| 欧美巨大黑人极品精男| 亚洲精品资源美女情侣酒店| 欧美亚洲一级片| 欧美疯狂做受xxxx高潮| 中文字幕久精品免费视频| 欧洲一区二区视频| 欧美激情久久久久久| 国产精品久久久久久久9999| 成人久久18免费网站图片| 日日骚av一区|