成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

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

8.3.10 據(jù)報Datagram通訊

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

8.3.11 什么是Datagram

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

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

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

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

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

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

 DatagramSocket();

 DatagramSocket(int prot);

 DatagramSocket(int port, InetAddress laddr)

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

用數(shù)據(jù)報方式編寫client/server程序時,無論在客戶方還是服務方,首先都要建立一個DatagramSocket對象,用來接收或發(fā)送數(shù)據(jù)報,然后使用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ù)報數(shù)據(jù),length為數(shù)據(jù)報中數(shù)據(jù)的長度,addr和port旨明目的地址,offset指明了數(shù)據(jù)報的位移量。

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

DatagramPacket packet=new DatagramPacket(buf, 256);

Socket.receive (packet);

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

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

Socket.send(packet);

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

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

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

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

//如果啟動的時候沒有給出Server的名字,那么出錯退出

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

 //打印出錯信息

 return; //返回

}

DatagramSocket socket=new DatagramSocklet();

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

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

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

//由命令行給出的第一個參數(shù)默認為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ù)報

socket.receive(packet); //接收

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

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

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

//打印生成的字符串

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

 }

}

2. 服務器方程序:QuoteServer.java

public class QuoteServer{

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

 {

new QuoteServerThread().start();

//啟動一個QuoteServerThread線程

 }

}

3. 程序QuoteServerThread.java

import java.io.*;

import java.net.*;

import java.util.*;

//服務器線程

public class QuoteServerThread extends Thread

{

protected DatagramSocket socket=null;

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

protected BufferedReader in=null;

//用來讀文件的一個Reader

protected boolean moreQuotes=true;

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

public QuoteServerThread() throws IOException {

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

this('QuoteServerThread');

//以QuoteServerThread為默認值調(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ù)報套接字

try{

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

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

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

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

 //打印出錯信息

}

}

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ù)報

 String dString=null;

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

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

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

 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ù)報

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

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

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

}

}

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

}

protected String getNextQuotes(){

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

String returnValue=null;

try {

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

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

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

 moreQuotes=false;

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

 returnValue='No more quotes. Goodbye.';

 //置返回值

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

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

 returnValue='IOException occurred in server';

 //置異常返回值

}

return returnValue; //返回字符串

}

}

標簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美精品 日韩| 亚洲手机成人高清视频| **欧美大码日韩| 99re6这里只有精品视频在线观看| 欧美日韩国产另类一区| 亚洲国产成人91porn| 午夜精品亚洲| 国产亚洲精品精华液| 不卡的电影网站| 精品国产露脸精彩对白| 国产二区国产一区在线观看| 精品视频1区2区3区| 日韩黄色小视频| 久久久久国产精品一区二区| 一区二区三区日本| 亚洲视频中文| 欧美极品美女视频| 91亚洲精品久久久蜜桃网站| 日韩精品一区在线| 粉嫩嫩av羞羞动漫久久久| 欧美日韩的一区二区| 麻豆国产欧美一区二区三区| 色天使色偷偷av一区二区| 亚洲国产毛片aaaaa无费看| 国产欧美日韩综合一区在线播放| 亚洲色图清纯唯美| 亚洲国产网站| 亚洲国产欧美在线人成| 久久九九99| 日韩高清中文字幕一区| 久久久综合网| 日韩国产欧美在线播放| 91福利视频久久久久| 美女网站色91| 欧美日韩国产综合一区二区| 国产麻豆精品95视频| 欧美日韩成人一区| 九九在线精品视频| 91麻豆精品久久久久蜜臀| 国产精品2024| 2023国产精品自拍| 国产精品xvideos88| 国产精品不卡一区| 99伊人成综合| 日本aⅴ免费视频一区二区三区| 色婷婷久久久久swag精品| 久久综合综合久久综合| 欧美高清激情brazzers| 波多野结衣中文字幕一区二区三区| 久久色.com| 亚洲香蕉视频| 亚洲国产日韩a在线播放性色| 色婷婷综合久久久中文一区二区 | 亚洲成人av一区二区| 欧美综合色免费| 国产98色在线|日韩| 国产三级一区二区| 99伊人成综合| 蜜臀99久久精品久久久久久软件| 51久久夜色精品国产麻豆| 9人人澡人人爽人人精品| 国产欧美一区二区精品久导航| 欧美三级特黄| 一区二区在线观看视频| 色欧美乱欧美15图片| 国产成人免费视频| 国产精品无码永久免费888| 亚洲美女黄色| 蜜臀av在线播放一区二区三区| 7777精品伊人久久久大香线蕉的 | 7777精品伊人久久久大香线蕉| 91视频观看视频| 伊人一区二区三区| 欧美日韩视频在线观看一区二区三区| 成人丝袜视频网| 亚洲欧美日韩在线| 欧美图区在线视频| 99国产精品国产精品久久| 一区二区三区免费看视频| 在线亚洲一区观看| 成人av电影在线网| 一区二区在线观看视频| 欧美精品久久久久久久多人混战| 97久久久精品综合88久久| 中文字幕视频一区二区三区久| 日本久久精品电影| www.欧美色图| 亚洲在线视频一区| 91精品欧美一区二区三区综合在| 欧美日一区二区三区在线观看国产免| 视频在线在亚洲| 久久综合中文字幕| 久久精选视频| 色综合天天天天做夜夜夜夜做| 亚洲成人激情av| 日韩精品一区二区三区视频在线观看 | 91精品国产欧美日韩| 在线观看一区| 国产高清久久久| 亚洲综合精品自拍| 日韩欧美一级精品久久| 国产日韩欧美一区| 国产不卡视频在线播放| 一区二区在线观看视频| 欧美成人女星排名| 麻豆av一区二区三区| av亚洲产国偷v产偷v自拍| 婷婷成人激情在线网| 国产欧美日韩卡一| 欧美羞羞免费网站| 亚洲视频碰碰| 国产成人免费网站| 五月婷婷另类国产| 国产无一区二区| 欧美日韩一区二区三区在线 | 久久亚洲精品小早川怜子| 91搞黄在线观看| 伊人色综合久久天天五月婷| 国产精品一区二区三区网站| 一区二区三区四区不卡在线 | 欧美日韩在线播| 亚洲精品乱码| 不卡免费追剧大全电视剧网站| 午夜视频在线观看一区二区| 国产日韩欧美麻豆| 337p亚洲精品色噜噜噜| 蜜乳av另类精品一区二区| 午夜精品一区二区三区四区| 国产一区二区91| 一区二区不卡在线播放 | 欧美色涩在线第一页| 国产日韩欧美三级| 欧美日韩视频| 成人免费精品视频| 久久99精品国产.久久久久 | 国产福利91精品一区| 五月天欧美精品| 亚洲美女屁股眼交| 国产亚洲精品7777| 欧美一区二区三区公司| 色噜噜狠狠成人网p站| 国产精品日本| 亚洲大胆av| 欧美喷水视频| 99久久综合99久久综合网站| 国精产品一区一区三区mba视频 | 国产高清精品久久久久| 一区二区三区四区在线播放| 中文字幕精品一区二区精品绿巨人 | 99re热精品| 欧美激情视频一区二区三区免费| 国产美女视频一区| 欧美成人aa大片| 欧美专区在线观看一区| 亚洲一区二区三区午夜| 亚洲小说欧美另类婷婷| 欧美成人综合一区| av中文字幕亚洲| 国产一区二区三区四区五区入口| 婷婷国产v国产偷v亚洲高清| 亚洲曰韩产成在线| 自拍偷拍亚洲综合| 国产精品欧美经典| 国产欧美精品一区二区三区四区 | 欧美色图首页| 成人av手机在线观看| 国产精品一区二区91| 国产一区二区三区免费播放| 美女免费视频一区二区| www.欧美精品一二区| 日本欧美久久久久免费播放网| 亚洲免费电影在线| 国产精品久久久久久久久免费丝袜| 欧美精品一区二区三区四区| 日韩免费在线观看| 91精品国产综合久久久久久久| 欧美吻胸吃奶大尺度电影| 欧美性大战久久久久久久蜜臀 | 欧美日韩日日夜夜| 色素色在线综合| 美女久久网站| 久久蜜桃精品| 欧美在线免费视屏| 欧美日韩一区二区在线观看视频 | 日韩国产一区二| 成人动漫一区二区在线| 国产一区二区免费在线| 国产一区二区精品久久91| 国产麻豆成人精品| 成人性色生活片| 色综合久久中文综合久久牛| 欧美日韩在线精品| 欧美日韩国产免费观看 | 久久精品毛片| 色婷婷亚洲综合| 欧美精品aⅴ在线视频| 欧美日韩一区二区电影| 欧美精品高清视频| 欧美成人女星排行榜| 2014亚洲片线观看视频免费|