日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

JAVA教程 第八講 Java網(wǎng)絡(luò)編程(三)

瀏覽:248日期:2024-03-05 08:31:24

8.3.10 據(jù)報(bào)Datagram通訊

前面在介紹TCP/IP協(xié)議的時(shí)候,我們已經(jīng)提到,在TCP/IP協(xié)議的傳輸層除了TCP協(xié)議之外還有一個(gè)UDP協(xié)議,相比而言UDP的應(yīng)用不如TCP廣泛,幾個(gè)標(biāo)準(zhǔn)的應(yīng)用層協(xié)議HTTP,F(xiàn)TP,SMTP…使用的都是TCP協(xié)議。但是,隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,UDP協(xié)議正越來越來顯示出其威力,尤其是在需要很強(qiáng)的實(shí)時(shí)交互性的場合,如網(wǎng)絡(luò)游戲,視頻會議等,UDP更是顯示出極強(qiáng)的威力,下面我們就介紹一下Java環(huán)境下如何實(shí)現(xiàn)UDP網(wǎng)絡(luò)傳輸。

8.3.11 什么是Datagram

所謂數(shù)據(jù)報(bào)(Datagram)就跟日常生活中的郵件系統(tǒng)一樣,是不能保證可靠的寄到的,而面向鏈接的TCP就好比電話,雙方能肯定對方接受到了信息。在本章前面,我們已經(jīng)對UDP和TCP進(jìn)行了比較,在這里再稍作小節(jié):

TCP,可靠,傳輸大小無限制,但是需要連接建立時(shí)間,差錯(cuò)控制開銷大。

UDP,不可靠,差錯(cuò)控制開銷較小,傳輸大小限制在64K以下,不需要建立連接。

總之,這兩種協(xié)議各有特點(diǎn),應(yīng)用的場合也不同,是完全互補(bǔ)的兩個(gè)協(xié)議,在TCP/IP協(xié)議中占有同樣重要的地位,要學(xué)好網(wǎng)絡(luò)編程,兩者缺一不可。

8.3.12 Datagram通訊的表示方法:DatagramSocket;DatagramPacket

包java.net中提供了兩個(gè)類DatagramSocket和DatagramPacket用來支持?jǐn)?shù)據(jù)報(bào)通信,DatagramSocket用于在程序之間建立傳送數(shù)據(jù)報(bào)的通信連接, DatagramPacket則用來表示一個(gè)數(shù)據(jù)報(bào)。先來看一下DatagramSocket的構(gòu)造方法:

 DatagramSocket();

 DatagramSocket(int prot);

 DatagramSocket(int port, InetAddress laddr)

其中,port指明socket所使用的端口號,如果未指明端口號,則把socket連接到本地主機(jī)上一個(gè)可用的端口。laddr指明一個(gè)可用的本地地址。給出端口號時(shí)要保證不發(fā)生端口沖突,否則會生成SocketException類例外。注意:上述的兩個(gè)構(gòu)造方法都聲明拋棄非運(yùn)行時(shí)例外SocketException,程序中必須進(jìn)行處理,或者捕獲、或者聲明拋棄。

用數(shù)據(jù)報(bào)方式編寫client/server程序時(shí),無論在客戶方還是服務(wù)方,首先都要建立一個(gè)DatagramSocket對象,用來接收或發(fā)送數(shù)據(jù)報(bào),然后使用DatagramPacket類對象作為傳輸數(shù)據(jù)的載體。下面看一下DatagramPacket的構(gòu)造方法 :

 DatagramPacket(byte buf[],int length);

 DatagramPacket(byte buf[], int length, InetAddress addr, int port);

 DatagramPacket(byte[] buf, int offset, int length);

 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port);

其中,buf中存放數(shù)據(jù)報(bào)數(shù)據(jù),length為數(shù)據(jù)報(bào)中數(shù)據(jù)的長度,addr和port旨明目的地址,offset指明了數(shù)據(jù)報(bào)的位移量。

在接收數(shù)據(jù)前,應(yīng)該采用上面的第一種方法生成一個(gè)DatagramPacket對象,給出接收數(shù)據(jù)的緩沖區(qū)及其長度。然后調(diào)用DatagramSocket 的方法receive()等待數(shù)據(jù)報(bào)的到來,receive()將一直等待,直到收到一個(gè)數(shù)據(jù)報(bào)為止。

DatagramPacket packet=new DatagramPacket(buf, 256);

Socket.receive (packet);

發(fā)送數(shù)據(jù)前,也要先生成一個(gè)新的DatagramPacket對象,這時(shí)要使用上面的第二種構(gòu)造方法,在給出存放發(fā)送數(shù)據(jù)的緩沖區(qū)的同時(shí),還要給出完整的目的地址,包括IP地址和端口號。發(fā)送數(shù)據(jù)是通過DatagramSocket的方法send()實(shí)現(xiàn)的,send()根據(jù)數(shù)據(jù)報(bào)的目的地址來尋徑,以傳遞數(shù)據(jù)報(bào)。

DatagramPacket packet=new DatagramPacket(buf, length, address, port);

Socket.send(packet);

在構(gòu)造數(shù)據(jù)報(bào)時(shí),要給出InetAddress類參數(shù)。類InetAddress在包java.net中定義,用來表示一個(gè)Internet地址,我們可以通過它提供的類方法getByName()從一個(gè)表示主機(jī)名的字符串獲取該主機(jī)的IP地址,然后再獲取相應(yīng)的地址信息。

8.3.13 基于UDP的簡單的Client/Server程序設(shè)計(jì)

有了上面的知識,我們就可以來構(gòu)件一個(gè)基于UDP的C/S 網(wǎng)絡(luò)傳輸模型

1. 客戶方程序 QuoteClient.java

import java.io.*;

import java.net.*;

import java.util.*;

public class QuoteClient {

 public static void main(String[] args) throws IOException

 {

if(args.length!=1) {

//如果啟動的時(shí)候沒有給出Server的名字,那么出錯(cuò)退出

 System.out.println('Usage:java QuoteClient ');

 //打印出錯(cuò)信息

 return; //返回

}

DatagramSocket socket=new DatagramSocklet();

//創(chuàng)建數(shù)據(jù)報(bào)套接字

Byte[] buf=new byte[256]; //創(chuàng)建緩沖區(qū)

InetAddress address=InetAddress.getByName(args [0]);

//由命令行給出的第一個(gè)參數(shù)默認(rèn)為Server的名字,通過它得到Server的IP信息

DatagramPacket packet=new DatagramPacket (buf, buf.length, address, 4445);

//創(chuàng)建DatagramPacket對象

socket.send(packet); //發(fā)送

packet=new DatagramPacket(buf,buf.length);

//創(chuàng)建新的DatagramPacket對象,用來接收數(shù)據(jù)報(bào)

socket.receive(packet); //接收

String received=new String(packet.getData());

//根據(jù)接收到的字節(jié)數(shù)組生成相應(yīng)的字符串

System.out.println('Quote of the Moment:'+received );

//打印生成的字符串

socket.close(); //關(guān)閉套接口

 }

}

2. 服務(wù)器方程序:QuoteServer.java

public class QuoteServer{

 public static void main(String args[]) throws java.io.IOException

 {

new QuoteServerThread().start();

//啟動一個(gè)QuoteServerThread線程

 }

}

3. 程序QuoteServerThread.java

import java.io.*;

import java.net.*;

import java.util.*;

//服務(wù)器線程

public class QuoteServerThread extends Thread

{

protected DatagramSocket socket=null;

//記錄和本對象相關(guān)聯(lián)的DatagramSocket對象

protected BufferedReader in=null;

//用來讀文件的一個(gè)Reader

protected boolean moreQuotes=true;

//標(biāo)志變量,是否繼續(xù)操作

public QuoteServerThread() throws IOException {

//無參數(shù)的構(gòu)造函數(shù)

this('QuoteServerThread');

//以QuoteServerThread為默認(rèn)值調(diào)用帶參數(shù)的構(gòu)造函數(shù)

}

public QuoteServerThread(String name) throws IOException {

super(name); //調(diào)用父類的構(gòu)造函數(shù)

socket=new DatagramSocket(4445);

//在端口4445創(chuàng)建數(shù)據(jù)報(bào)套接字

try{

in= new BufferedReader(new FileReader(' one-liners.txt'));

//打開一個(gè)文件,構(gòu)造相應(yīng)的BufferReader對象

}catch(FileNotFoundException e) { //異常處理

System.err.println('Could not open quote file. Serving time instead.');

 //打印出錯(cuò)信息

}

}

public void run() //線程主體

{

while(moreQuotes) {

 try{

 byte[] buf=new byte[256]; //創(chuàng)建緩沖區(qū)

 DatagramPacket packet=new DatagramPacket(buf,buf.length);

 //由緩沖區(qū)構(gòu)造DatagramPacket對象

 socket.receive(packet); //接收數(shù)據(jù)報(bào)

 String dString=null;

 if(in= =null) dString=new Date().toString();

 //如果初始化的時(shí)候打開文件失敗了,

 //則使用日期作為要傳送的字符串

 else dString=getNextQuote();

 //否則調(diào)用成員函數(shù)從文件中讀出字符串

 buf=dString.getByte();

 //把String轉(zhuǎn)換成字節(jié)數(shù)組,以便傳送

 InetAddress address=packet.getAddress();

 //從Client端傳來的Packet中得到Client地址

 int port=packet.getPort(); //和端口號

 packet=new DatagramPacket(buf,buf.length,address,port);

 //根據(jù)客戶端信息構(gòu)建DatagramPacket

 socket.send(packet); //發(fā)送數(shù)據(jù)報(bào)

}catch(IOException e) { //異常處理

 e.printStackTrace(); //打印錯(cuò)誤棧

 moreQuotes=false; //標(biāo)志變量置false,以結(jié)束循環(huán)

}

}

socket.close(); //關(guān)閉數(shù)據(jù)報(bào)套接字

}

protected String getNextQuotes(){

//成員函數(shù),從文件中讀數(shù)據(jù)

String returnValue=null;

try {

 if((returnValue=in.readLine())= =null) {

 //從文件中讀一行,如果讀到了文件尾

 in.close( ); //關(guān)閉輸入流

 moreQuotes=false;

 //標(biāo)志變量置false,以結(jié)束循環(huán)

 returnValue='No more quotes. Goodbye.';

 //置返回值

 } //否則返回字符串即為從文件讀出的字符串

}catch(IOEception e) { //異常處理

 returnValue='IOException occurred in server';

 //置異常返回值

}

return returnValue; //返回字符串

}

}

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本一区中文字幕| 日av在线不卡| 国产免费av一区二区三区| 亚洲精选久久| 日韩精品久久久久久久软件91| 亚洲一区二区日韩| 91麻豆精品激情在线观看最新| 日韩极品在线观看| 国产精品videossex| 国产精品色婷婷在线观看| 国产日产精品_国产精品毛片| 国产精品美女午夜爽爽| 国产91在线精品| 黑丝一区二区三区| 日本不卡一区二区| 国产精品超碰| 99精品在线观看| 亚洲啊v在线免费视频| 精品美女视频| 欧美日韩四区| 欧美亚洲专区| 日韩欧美另类一区二区| 蜜桃久久精品一区二区| 久久久精品国产**网站| 天堂√8在线中文| 好吊视频一区二区三区四区| 日韩av中文在线观看| 精品高清久久| 极品日韩av| 91精品麻豆| 欧美日韩尤物久久| 亚洲精品综合| 伊伊综合在线| 91九色综合| 亚洲国产日韩欧美在线| 国产欧美二区| 亚洲综合日本| 成人在线免费观看91| 麻豆久久精品| 久久不见久久见中文字幕免费| 亚洲综合电影| 日本不卡视频在线观看| 欧美aa在线观看| 日韩三级精品| 婷婷成人在线| 国产精品nxnn| 蜜臀av一区二区三区| 丰满少妇一区| 日韩激情视频网站| 久久久久久久久丰满| 欧美日韩一区自拍| 精品一区在线| 精品九九久久| 日韩精品一级| 午夜影院欧美| 亚洲综合电影| 久久久久亚洲精品中文字幕| 亚洲香蕉久久| 香蕉久久夜色精品国产| 日本а中文在线天堂| 国产伦精品一区二区三区视频 | 欧美日韩国产传媒| 国产欧美高清| 亚洲精品日本| 国产亚洲一区在线| www成人在线视频| 久草精品视频| 国产欧美自拍| 日本不卡中文字幕| 在线亚洲国产精品网站| 日韩免费看片| 精品一区二区三区中文字幕在线| 日韩一区二区三区在线看| 99国内精品| 久久影视一区| 久久久噜噜噜| 青青青免费在线视频| 久久精品97| 免费日韩av片| 亚洲激情二区| 午夜日韩av| 欧美不卡视频| 国产国产精品| 不卡在线一区二区| 91九色精品国产一区二区| 在线亚洲人成| 天堂日韩电影| 久久精品国内一区二区三区水蜜桃| 首页国产精品| 亚洲精品成人图区| 91看片一区| 欧美香蕉视频| 国产网站在线| 久久精品九色| 国产一区2区| 久久青青视频| 久久久久亚洲| 99视频在线精品国自产拍免费观看| av亚洲在线观看| 欧美日韩视频| 亚洲区第一页| 欧美在线首页| 国产一区二区视频在线看| 国产一区二区三区成人欧美日韩在线观看| 国产精品第一国产精品| 国产激情久久| 色综合五月天| 国产白浆在线免费观看| 欧美日中文字幕| av不卡在线看| 日韩区一区二| 另类欧美日韩国产在线| 成人一区不卡| 婷婷成人在线| 蜜桃久久av一区| 国产亚洲精品美女久久久久久久久久| 国产精品久久久久毛片大屁完整版| 国产精品美女在线观看直播| 精品国产午夜肉伦伦影院| 色爱av综合网| 老牛影视一区二区三区| 欧美日韩xxxx| 国产美女撒尿一区二区| 97精品国产| 国产精品毛片一区二区三区| 日韩福利视频导航| 久久亚洲精精品中文字幕| 日韩欧美少妇| 中文字幕日韩亚洲| 精品一区91| 女人天堂亚洲aⅴ在线观看| 一区二区91| 水蜜桃精品av一区二区| 99xxxx成人网| 麻豆精品久久久| 最新亚洲一区| 国产精品久久久久77777丨| 精品国产aⅴ| 亚洲作爱视频| 精品国产91| 一区二区国产在线| 麻豆视频在线看| 亚洲精品麻豆| 国产美女高潮在线| 色综合视频一区二区三区日韩 | 丝袜美腿一区二区三区| 国产麻豆一区二区三区| 久久精品青草| 日韩av电影一区| 狠狠躁少妇一区二区三区| 午夜亚洲福利在线老司机| 欧美一区成人| 欧美亚洲国产一区| 久久av免费| 久久亚洲欧洲| 日韩精品91| 日本视频一区二区| 激情五月综合| 韩国女主播一区二区三区| 在线免费观看亚洲| 日韩电影免费网站| 国产亚洲人成a在线v网站| 欧美精品九九| 国产aⅴ精品一区二区三区久久| 亚洲人成亚洲精品| 午夜av成人| 国产精品成人国产| 免费在线成人网| 日本国产精品| 欧美国产极品| 亚洲精品动态| re久久精品视频| 超碰在线99| 国产精选一区| 日韩欧美久久| 久久国产66| 欧美日韩国产传媒| 欧美三区四区| 狠狠久久伊人| 国产精品九九| 日韩精品第二页| 男女性色大片免费观看一区二区| 久久精品国产一区二区| 日韩av不卡一区二区| 中日韩男男gay无套| 天堂av在线| 国产精品久久观看| 国产一区二区三区不卡av| 欧美激情福利| 国产亚洲电影| 日本欧美一区| 日本在线不卡视频| 日韩免费精品| 少妇精品在线| 亚州精品视频| 日韩 欧美一区二区三区| 中文字幕日韩欧美精品高清在线| 999国产精品永久免费视频app| 日韩精品专区| 久久久夜精品|