国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于用戶數(shù)據(jù)報協(xié)議的Java Socket數(shù)據(jù)通信

2012-11-15 06:46茹志鵑
中國科技信息 2012年9期
關(guān)鍵詞:數(shù)據(jù)通信線程進(jìn)程

茹志鵑

正德職業(yè)技術(shù)學(xué)院,江蘇 南京 211106

基于用戶數(shù)據(jù)報協(xié)議的Java Socket數(shù)據(jù)通信

茹志鵑

正德職業(yè)技術(shù)學(xué)院,江蘇 南京 211106

數(shù)據(jù)通信是網(wǎng)絡(luò)的主要應(yīng)用之一,隨著網(wǎng)絡(luò)的快速發(fā)展,大多程序設(shè)計語言都開發(fā)了實現(xiàn)數(shù)據(jù)通信的應(yīng)用程序接口,Java語言也不例外。Java語言,因平臺無關(guān)和多線程的特性,被廣泛應(yīng)用于Web開發(fā)中,其豐富的類庫中提供了Socket套接字,應(yīng)用程序可通過套接字向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求,非常方便的實現(xiàn)網(wǎng)絡(luò)間的數(shù)據(jù)通信?;谟脩魯?shù)據(jù)報通信協(xié)議或者傳輸控制協(xié)議,利用Java語言的面向?qū)ο?、多線程、可視化程序開發(fā)以及Socket套接字技術(shù),可以非常簡單的實現(xiàn)多個客戶端之間的網(wǎng)絡(luò)數(shù)據(jù)通信。

Socket;UDP;數(shù)據(jù)報;多線程

Java作為一種程序設(shè)計語言,簡單、面向?qū)ο蟆⒉灰蕾囉跈C(jī)器的結(jié)構(gòu)、具有可移植性、安全性、并且提供了并發(fā)的機(jī)制、具有很高的性能,最大限度地利用了網(wǎng)絡(luò),還提供了豐富的類庫,使程序設(shè)計者可以很方便地開發(fā)自己的系統(tǒng)。Java語言的眾多特點(diǎn)中,最特別的就是與平臺無關(guān)和多線程了,也因此被廣泛用于Web開發(fā)中。java.net包中,提供了網(wǎng)絡(luò)編程所需要各個類,通過這些類,可方便的開發(fā)網(wǎng)絡(luò)間數(shù)據(jù)通信程序。

1.開發(fā)技術(shù)介紹

實現(xiàn)網(wǎng)絡(luò)間的數(shù)據(jù)通信,必須基于傳輸層的兩個服務(wù)質(zhì)量不同的協(xié)議——TCP和UDP,Java類庫中提供了DatagramSocket和DatagramPacket兩個類來實現(xiàn)基于UDP協(xié)議的數(shù)據(jù)通信,同時也提供了Socket和ServerSocket兩個類來實現(xiàn)基于TCP協(xié)議的數(shù)據(jù)通信,下面主要介紹基于UDP協(xié)議的數(shù)據(jù)通信。

1.1 UDP協(xié)議

UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)協(xié)議是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù),是一個簡單的面向數(shù)據(jù)報的傳輸層協(xié)議,傳送數(shù)據(jù)前并不與對方建立連接,在傳輸數(shù)據(jù)前,發(fā)送方和接收方相互交換信息使雙方同步,對接收到的數(shù)據(jù)包也不發(fā)送確認(rèn)信號,發(fā)送端不知道數(shù)據(jù)是否被正確接收,也不會重發(fā)數(shù)據(jù),因此具有較好的實時性和工作效率。

1.2 SOCKET

所謂socket通常也稱作“套接字”,是網(wǎng)絡(luò)編程中的一個接口,用于描述IP地址和端口,是一個通信鏈的句柄,應(yīng)用程序通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。

J a v a語言的U D P通信中,使用DatagramSocket類來創(chuàng)建收、發(fā)數(shù)據(jù)報的Socket對象。與TCP通信不同,它不存在“連接”的概念,取而代之的是一個數(shù)據(jù)報包DatagramPacket對象,這個數(shù)據(jù)報包本身包含IP地址、端口號和數(shù)據(jù)內(nèi)容,據(jù)此可以知道發(fā)送方和目的地。

使用DatagramSocket的構(gòu)造方法public DatagramSocket(int port)throws SocketException來創(chuàng)建數(shù)據(jù)報套接字,并綁定到指定的端口上。對于數(shù)據(jù)報的接收,主要使用DatagramPacket 類的public DatagramPacket(byte buf[],int length)方法構(gòu)造DatagramPacket對象,來接收長度為length的數(shù)據(jù)報包,發(fā)送數(shù)據(jù)報使用public DatagramPacket(byte[] buf, int length, InetAddress address, int port)構(gòu)造數(shù)據(jù)報包,用來將長度為length的包發(fā)送到指定主機(jī)上的指定端口號。

2.程序介紹

程序的設(shè)計過程中,界面制作可使用Java開發(fā)的可視化編程工具,創(chuàng)建窗口后,添加輸出信息的文本區(qū)域和輸入信息的文本框兩個控件,并且對回車事件和窗口關(guān)閉事件進(jìn)行處理,這里不再介紹。下面主要介紹使用DatagramSocket和DatagramPacket兩個類編寫數(shù)據(jù)通信的代碼和為提高程序的運(yùn)行速度所采用的多線程機(jī)制。

2.1 創(chuàng)建接收和發(fā)送程序

導(dǎo)入網(wǎng)絡(luò)編程所需要的包java.net,就可以開始編寫發(fā)送數(shù)據(jù)功能的方法代碼2-1和接收數(shù)據(jù)功能的方法代碼2-2。

代碼2-2 接收數(shù)據(jù)報代碼

接收方ds綁定端口號8000,并創(chuàng)建數(shù)據(jù)報dp,等待接收發(fā)送方發(fā)送的數(shù)據(jù);發(fā)送方ds無需綁定固定端口號,但必須在創(chuàng)建數(shù)據(jù)報dp時,指定要發(fā)送到電腦的IP地址和端口號8000,通過代碼2-1和2-2就可以實現(xiàn)簡單的基于UDP協(xié)議的數(shù)據(jù)通信。

2.2 多線程技術(shù)

一般來說,當(dāng)運(yùn)行一個應(yīng)用程序的時候,就啟動了一個進(jìn)程,有時會啟動多個進(jìn)程。啟動進(jìn)程的時候,操作系統(tǒng)會為進(jìn)程分配資源,其中最主要的資源是內(nèi)存空間。在進(jìn)程中,有些程序流程塊是可以亂序執(zhí)行的,并且這個代碼塊可以同時被多次執(zhí)行,這樣的代碼塊就是線程體。線程是進(jìn)程中亂序執(zhí)行的代碼流程,當(dāng)多個線程同時運(yùn)行的時候,這樣的執(zhí)行模式稱為并發(fā)執(zhí)行,多線程的目的是為了最大限度的利用CPU資源。

Java編寫程序都運(yùn)行在Java虛擬機(jī)(JVM)中,在JVM的內(nèi)部,程序的多任務(wù)是通過線程來實現(xiàn)的。每個正在系統(tǒng)上運(yùn)行的程序都是一個進(jìn)程,每個進(jìn)程包含一到多個線程,進(jìn)程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行,也可以把它理解為代碼運(yùn)行的上下文。所以線程基本上是輕量級的進(jìn)程,它負(fù)責(zé)在單個程序里執(zhí)行多任務(wù),通常由操作系統(tǒng)負(fù)責(zé)多個線程的調(diào)度和執(zhí)行。Java語言中用多線程來同時為多個客戶提供服務(wù),這是提高服務(wù)器的并發(fā)性能的最常用手段。

在網(wǎng)絡(luò)編程中,使用多線程可以把占據(jù)長時間的等待接收聊天信息的程序任務(wù)放到后臺去處理,使程序的運(yùn)行速度加快,提高CPU的利用率,在等待接收聊天信息的同時能夠發(fā)送聊天信息給對方。

Java中用擴(kuò)展Thread類或者實現(xiàn)Runnable接口兩種方法來實現(xiàn)多線程,將發(fā)送數(shù)據(jù)端代碼2-1和接收數(shù)據(jù)端代碼2-2寫在實現(xiàn)多線程的run方法中即可。run方法是多線程程序的一個約定,所有的多線程代碼都在run方法里面。Thread類實際上也是實現(xiàn)了Runnable接口的類。在啟動多線程的時候,需要先通過Thread類的構(gòu)造方法Thread(Runnable target) 構(gòu)造出對象,然后調(diào)用Thread對象的start()方法來運(yùn)行多線程代碼。實際上所有的多線程代碼都是通過運(yùn)行Thread的start()方法來運(yùn)行的。因此,不管是擴(kuò)展Thread類還是實現(xiàn)Runnable接口來實現(xiàn)多線程,最終還是通過Thread的對象來控制線程的。

3.結(jié)語

本文介紹的DatagramSocket只允許數(shù)據(jù)報發(fā)往一個目的地,還可以使用java.net包中的類MulticastSocket。在發(fā)送數(shù)據(jù)報時使用MulticastSocket類,可以將數(shù)據(jù)報以廣播方式發(fā)送到指定端口的所有客戶。

網(wǎng)絡(luò)特別是計算機(jī)網(wǎng)絡(luò)的發(fā)展,越來越深刻的改變著人們生活的方方面面。當(dāng)需要實時快速時,人們僅僅只需要簡單的通訊,這時可以使用UDP協(xié)議來實現(xiàn)數(shù)據(jù)通信的功能。但是由于UDP協(xié)議的無連接,若需要安全可靠的數(shù)據(jù)通信時,就需要選擇有連接的TCP協(xié)議來進(jìn)行數(shù)據(jù)通信了。

總之,無論使用任何語言,任何方式實現(xiàn)數(shù)據(jù)通信,都必須遵循固定的步驟進(jìn)行操作,在熟悉了這些步驟以后,可以根據(jù)需要進(jìn)行邏輯上的處理,但還是必須以固定的步驟為前提。其實,實現(xiàn)基礎(chǔ)的數(shù)據(jù)通信本身不難,也不需要很多的基礎(chǔ)網(wǎng)絡(luò)知識,編程的基礎(chǔ)功能都已經(jīng)由應(yīng)用程序接口實現(xiàn),只需要按照固定的步驟進(jìn)行即可,例如使用Java提供的Socket接口和多線程技術(shù),可方便高效的開發(fā)基于UDP或TCP的通信軟件,實現(xiàn)網(wǎng)絡(luò)間數(shù)據(jù)通信。

[1]孫衛(wèi)琴 編著. JAVA網(wǎng)絡(luò)編程精解[M].北京:電子工業(yè)出版社, 2007.2

[2]劉永華.于春花編著.Java網(wǎng)絡(luò)編程技術(shù)[M].北京:清華大學(xué)出版社,2008.5

10.3969/j.issn.1001-8972.2012.09.054

茹志鵑、本科、講師、計算機(jī)科學(xué)與技術(shù)。

猜你喜歡
數(shù)據(jù)通信線程進(jìn)程
基于C#線程實驗探究
基于國產(chǎn)化環(huán)境的線程池模型研究與實現(xiàn)
債券市場對外開放的進(jìn)程與展望
線程池調(diào)度對服務(wù)器性能影響的研究*
改革開放進(jìn)程中的國際收支統(tǒng)計
數(shù)據(jù)通信網(wǎng)絡(luò)維護(hù)與網(wǎng)絡(luò)安全問題探討
監(jiān)測系統(tǒng)接口數(shù)據(jù)通信方式
關(guān)于數(shù)據(jù)通信電源現(xiàn)狀和高壓直流供電新系統(tǒng)的分析
一種高效可靠的串行數(shù)據(jù)通信協(xié)議及處理算法
社會進(jìn)程中的新聞學(xué)探尋