999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于UDP 協(xié)議的Socket網(wǎng)絡(luò)編程

2008-12-31 00:00:00周麗娟
電腦知識與技術(shù) 2008年34期

摘要:套接字是一種網(wǎng)絡(luò)編程接口,應(yīng)用程序通過這種接口可以和不同網(wǎng)絡(luò)中的應(yīng)用程序進行通信,而不必擔(dān)心網(wǎng)絡(luò)協(xié)議不同所引發(fā)的問題。文章介紹了基于UDP協(xié)議的Socket網(wǎng)絡(luò)編程機制和原理,提出了以Java Socket來實現(xiàn)網(wǎng)絡(luò)通信的步驟和方法。

關(guān)鍵詞:UDP協(xié)議;Socket;網(wǎng)絡(luò)通信

中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)34-1867-02

Socket Network Programs Based on UDP Protocol

ZHOU Li-juan

(College of Science, Hunan University of Technology, Zhuzhou 412008, China)

Abstract: Windows Socket is a network programming interface,and applications can correspond to eachother in different domains without worrying about the different protocols by using it.This paper introduces the mechanism and principle of Socket network programs based on UDP protocol,and proposes a method of network with Java socket.

key words: UDP protocol;socket; network communication

Socket適用于網(wǎng)絡(luò)環(huán)境中的進程間通信,它已成為當(dāng)前許多操作系統(tǒng)的網(wǎng)絡(luò)API,也是網(wǎng)絡(luò)操作系統(tǒng)中必不可少的基礎(chǔ)功能。隨著Linux操作系統(tǒng)和Internet的不斷發(fā)展,Linux網(wǎng)絡(luò)環(huán)境下尤其是基于UDP的socket通信技術(shù)仍廣為注目。文章介紹了socket的編程原理,并通過一個Java編寫的客戶/服務(wù)器程序,描述了網(wǎng)絡(luò)中基于UDP的不同主機上的兩個進程之間的socket通信機制。

1 Socket通信機制

Socket(套接字)機制是一種API,是網(wǎng)絡(luò)應(yīng)用程序的編程接口。Socket是通過標準文件描述符和其它程序通訊的一個方法。每一個套接字都用一個半相關(guān)描述:{協(xié)議,本地地址、本地端口}來表示;一個完整的套接字則用一個相關(guān)描述:{協(xié)議,本地地址、本地端口、遠程地址、遠程端口},每一個套接字都有一個本地的由操作系統(tǒng)分配的唯一的套接字號。

根據(jù)傳輸數(shù)據(jù)類型的不同,Socket主要分為三類:1) 流式Socket(SOCK_STREAM),在這種方式下,兩個通訊的應(yīng)用程序之間要先建立一種虛擬的連接,提供可靠的、面向連接的通信流,它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序的。2) 數(shù)據(jù)報Socket(SOCK_DGRAM),它使用數(shù)據(jù)報協(xié)議UDP,定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證可靠、無差錯。3) 原始Socket,原始套接字允許對底層協(xié)議如IP或ICMP直接訪問,它功能強大但使用較為不便,主要用于一些協(xié)議的開發(fā)。

2 UDP協(xié)議的工作原理

UDP協(xié)議是一個面向無連接的協(xié)議,其連接的建立不必像TCP那樣需要服務(wù)器端偵聽,也不需要有客戶機請求連接,屬于一種“強制”性的網(wǎng)絡(luò)連接。UDP提供一對一或一對多的、無連接的數(shù)據(jù)報服務(wù)。該服務(wù)對消息中傳輸?shù)臄?shù)據(jù)提供不可靠的、最大努力的傳送,這意味著它不保證數(shù)據(jù)的到達,也不保證所傳送的數(shù)據(jù)報的順序是否正確,UDP不重新傳輸丟失的數(shù)據(jù)。其主要工作是:將應(yīng)用程序傳輸過來的數(shù)據(jù)分塊交給網(wǎng)絡(luò)層,確認接受到分組信息。

盡管UDP無法像TCP一樣提供可靠的數(shù)據(jù)傳輸,但UDP并不比TCP缺乏優(yōu)越性。UDP在傳輸效率方面比TCP要高一些,而且許多應(yīng)用程序并不需要保證嚴格的傳輸可靠性,比如視頻會議系統(tǒng)等,需要實時的交互,但并不要求音頻視頻的絕對正確。

使用UDP協(xié)議傳輸數(shù)據(jù)時,首先設(shè)置客戶計算機的Local Port(本地端口)屬性,而作為服務(wù)器的計算機只需要設(shè)置Remoter Host(遠程主機)屬性為客戶計算機的IP地址或域名即可,并將其Remote Port屬性設(shè)置為客戶計算機上的Local Port屬性。使用UDP端口號時,端口提供了用于發(fā)送消息的位置,每個端口由一個唯一的編號來標識。當(dāng)應(yīng)用程序向另一臺計算機發(fā)送數(shù)據(jù)時,UDP生成一個數(shù)據(jù)頭,包括源端口,這些端口提供送達信息所需要的地址。UDP協(xié)議還為數(shù)據(jù)和數(shù)據(jù)頭計算出求和檢驗的值,在目標計算機中,數(shù)據(jù)包被傳遞至UDP協(xié)議程序并送到目的地端口。

3 UDP套接字的通信過程

Java.net中提供了兩個類DatagramSocket和DatagramPacket用來支持數(shù)據(jù)報通信。DatagramSoc ket用來在程序之間建立傳送數(shù)據(jù)報的通信連接,是數(shù)據(jù)報通信中的Socket。在數(shù)據(jù)報實現(xiàn)C/S通信程序時,無論在客戶端還是服務(wù)器端,都要首先建立一個DatagramSocket對象,用來表示數(shù)據(jù)報通信的端點,應(yīng)用程序通過Socket接收或發(fā)送數(shù)據(jù)報。

DatagramPacket則用來表示一個數(shù)據(jù)報,它是傳輸數(shù)據(jù)的載體,封裝了數(shù)據(jù)、數(shù)據(jù)長度、數(shù)據(jù)報地址等信息。

采用UDP套接字方式實現(xiàn)C/S的通信程序由客戶端和服務(wù)器端兩部分組成。服務(wù)器進程依次按以下步驟進行:1) 調(diào)用Socket()創(chuàng)建一個數(shù)據(jù)報套接字;2) 調(diào)用bind()把服務(wù)器地址綁定在該套接字上;3) 調(diào)用recvform()等待客戶進程發(fā)來的請求,服務(wù)器此時處于無限循環(huán)狀態(tài);4) 服務(wù)進程接收到客戶進程所發(fā)來的數(shù)據(jù)報后,進行處理,調(diào)用sendto()將處理結(jié)果返回給客戶進程,返回狀態(tài)3),繼續(xù)監(jiān)聽;5)服務(wù)進程調(diào)用close()撤消套接字,終止服務(wù)。

客戶進程則按以下步驟進行:1) 調(diào)用Socket()創(chuàng)建一個數(shù)據(jù)流套接字;2) 調(diào)用sendto()向服務(wù)器進程發(fā)送數(shù)據(jù)報;3) 調(diào)用recvfrom()等待服務(wù)器進程返回該處理結(jié)果;4) 客戶進程調(diào)用close()撤消套接字。

4 數(shù)據(jù)報通信實例

程序由服務(wù)器端和客戶端兩部分組成,服務(wù)器端主機中有一個名為“udp_socket.txt”文件,文件中保存了一段英文。服務(wù)器端接收一個客戶端的請求,就從文件中讀取若干個英文字符發(fā)送給客戶端。當(dāng)文件中所有內(nèi)容發(fā)送給完畢,服務(wù)器端程序?qū)⑼顺???蛻舳耸紫葮?gòu)造一個數(shù)據(jù)報發(fā)送給服務(wù)器端,然后等待接受服務(wù)器端響應(yīng),當(dāng)接收到服務(wù)器端的數(shù)據(jù)報后,顯示數(shù)據(jù)并結(jié)束通信。

1) 服務(wù)器端程序

public class Server_Th

{ boolean m_q=true;

public void serverWork() throea IOException

{DatagramSocket ds=new DatagramSocket(2000)

//創(chuàng)建端口號為2000的數(shù)據(jù)報套接字

BufferedReader in=new BufferedReader(new FileReader (“udp_socket.txt”));

while(m_q)

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

DatagramPacket packet=new DatagramPacket (buf, buflength); //創(chuàng)建接收數(shù)據(jù)報對象

ds.receive(packet);//接收數(shù)據(jù)報

String dString=1;

if((dString=in.reaLine())==1)

{in.close();

m_q=1;

dString=”Good Morning!”;}

buf=dString.getBytes();//將數(shù)據(jù)存儲到buf中

inetAddress address=packet.getAddress();

//得到客戶端IP地址

int prot=packet.getPort();//得到客戶端的端口

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

//構(gòu)造要發(fā)送數(shù)據(jù)報

ds.send(packet);//發(fā)送數(shù)據(jù)報

}

ds.close();//關(guān)閉

}

public void main(String args[])

{ Server_Th server=new Server_Th();

try

{server.serverWork();}

Catch(IOException e){}

}}

2) 客戶端程序

public class Client_Th

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

{ DatagramSocket socket=new DatagramSocket( );

//創(chuàng)建套接字對象

byte buf[ ]=new byte[256];

InetAdress address=InetAddress.getByName(“20.14.30.9”);

//服務(wù)器IP地址

DatagramPacket packet=new DatagramPacket(buf,buf. Length,address,2000);//創(chuàng)建要發(fā)送的數(shù)據(jù)報對象

socket.send(packet);//接收數(shù)據(jù)報

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

//創(chuàng)建要接收的數(shù)據(jù)報對象

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

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

System.out.println(“The string form the server: ”+recerived);

//取得數(shù)據(jù)報中的數(shù)據(jù)并顯示

Socket.close();//關(guān)閉socket

}}

編寫程序時客戶端和服務(wù)器端的DatagramSocket必須用一個端口,因為客戶端向服務(wù)器端請求時,服務(wù)器需要知道從哪個端口監(jiān)聽請求。當(dāng)數(shù)據(jù)進行傳輸時,服務(wù)器從接收到的數(shù)據(jù)報中得到客戶端的接收數(shù)據(jù)的端口,然后將數(shù)據(jù)報發(fā)送到這個端口,客戶端則監(jiān)聽這個端口而得到服務(wù)器端發(fā)送過來的數(shù)據(jù)報并顯示其內(nèi)容。運行時要先運行服務(wù)器端程序,再運行客戶端程序。

5 小結(jié)

Socket在網(wǎng)絡(luò)編程方面發(fā)揮著很大的作用。UDP是可靠性無法得到保障的協(xié)議,但對于質(zhì)量要求不是很高的網(wǎng)絡(luò)應(yīng)用程序,UDP是一個很好的選擇。

參考文獻:

[1] 張桂珠.Java面向?qū)ο蟪绦蛟O(shè)計[M].北京:郵電出版社,2006.

[2] 周坤,傅德勝.基于Windows Socket的網(wǎng)絡(luò)數(shù)據(jù)傳輸及其安全[J].計算機工程與設(shè)計,2007,28(22):5381-5386.

[3] 趙文清.淺析用Socket的Java語言網(wǎng)絡(luò)通訊機制和程序設(shè)計[J].信息技術(shù),2002(7):66-67.

[4] 夏靖波.Windows網(wǎng)絡(luò)程序設(shè)計[M].西安:電子科技大學(xué)出版,2006.

主站蜘蛛池模板: 久久伊人操| 无码福利视频| 在线观看免费AV网| 丰满人妻久久中文字幕| 国产欧美视频在线观看| 国产成人永久免费视频| 一级毛片在线播放| 免费在线视频a| 四虎永久免费在线| 亚洲av无码久久无遮挡| 国产又大又粗又猛又爽的视频| 五月丁香伊人啪啪手机免费观看| 四虎国产成人免费观看| 婷婷六月激情综合一区| 亚洲中文字幕久久精品无码一区| 亚洲va视频| 88av在线播放| 99久久精品久久久久久婷婷| 精品人妻无码中字系列| 成人午夜久久| 国产精品白浆在线播放| 午夜福利在线观看入口| 日韩一区二区三免费高清| 国产成人高清精品免费软件 | 久久国产精品无码hdav| 黄色网站不卡无码| 成年人国产视频| 一级毛片无毒不卡直接观看| 白浆视频在线观看| 露脸国产精品自产在线播| 国产成人夜色91| 成人在线观看一区| 国产一级二级三级毛片| 久久久久无码精品| 国产资源免费观看| 欧美精品伊人久久| 国产正在播放| 欧美日韩专区| 亚洲最猛黑人xxxx黑人猛交| 日本精品视频一区二区| av尤物免费在线观看| a免费毛片在线播放| 污视频日本| 日韩最新中文字幕| 欧美色图第一页| 国产色图在线观看| 亚洲V日韩V无码一区二区 | 国产亚洲美日韩AV中文字幕无码成人| 精品欧美一区二区三区在线| 亚洲成年网站在线观看| 欧美日韩国产系列在线观看| 亚洲一区二区三区香蕉| 国产网站免费| 国产情精品嫩草影院88av| 一本视频精品中文字幕| 色综合成人| 四虎影视8848永久精品| 国产性精品| 91麻豆精品国产91久久久久| 在线免费看黄的网站| 色AV色 综合网站| 国产精品一区二区久久精品无码| 国产剧情一区二区| 亚洲欧美不卡视频| 亚洲欧美人成电影在线观看| 欧美一级爱操视频| 成人福利一区二区视频在线| 成年人午夜免费视频| 欧美激情二区三区| 国产男人的天堂| 国产丝袜丝视频在线观看| 久久亚洲国产最新网站| 亚洲精品第1页| 国产网站一区二区三区| 精品久久久久久久久久久| 99er这里只有精品| 激情综合网激情综合| 精品人妻AV区| 久久夜夜视频| 久久伊伊香蕉综合精品| 亚洲人精品亚洲人成在线| 无码日韩视频|