JavaTCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解_第1頁
JavaTCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解_第2頁
JavaTCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解_第3頁
JavaTCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第JavaTCP網(wǎng)絡(luò)通信協(xié)議詳細(xì)講解TCP與UDP都屬于TCP/IP協(xié)議

TCP(TransmissionControlProtocol,傳輸控制協(xié)議)是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。一個TCP連接必須要經(jīng)過三次對話才能建立起來,其中的過程非常復(fù)雜,只簡單的描述下這三次對話的簡單過程:

1)主機(jī)A向主機(jī)B發(fā)出連接請求數(shù)據(jù)包:我想給你發(fā)數(shù)據(jù),可以嗎?,這是第一次對話;

2)主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步(同步就是兩臺主機(jī)一個在發(fā)送,一個在接收,協(xié)調(diào)工作)的數(shù)據(jù)包:可以,你什么時候發(fā)?,這是第二次對話;

3)主機(jī)A再發(fā)出一個數(shù)據(jù)包確認(rèn)主機(jī)B的要求同步:我現(xiàn)在就發(fā),你接著吧!,這是第三次對話。

三次對話的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次對話之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù)據(jù)。

TCP的三次握手過程保證了傳輸?shù)陌踩?,同時會確認(rèn)對方是否接受到信息

斷開的時候進(jìn)行四次

UDP(UserDataProtocol,用戶數(shù)據(jù)報協(xié)議)是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計算機(jī)的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段。

由于不需要像TCP那樣的握手過程,使得UDP的傳輸速度非??旖?,但他不保證傳輸?shù)陌踩?,也不確認(rèn)對方是否接收到信息

實現(xiàn)代碼:

//向指定ip發(fā)送信息

publicstaticvoidmain(String[]args)throwsException{

Sockets=newSocket(InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()),10000);

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

//封裝輸出流對象

BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(s.getOutputStream()));

Stringline;

while(true){

if((line=br.readLine())!=null){

if("1024".equals(line)){

bw.write(line);

bw.newLine();

break;

bw.write(line);

bw.newLine();

bw.flush();

//獲取輸出流對象

//釋放資源

s.close();

}

//接收發(fā)送到本機(jī)的信息

ServerSocketsocket=newServerSocket(10000);

Socketaccept=socket.accept();

BufferedReaderbr=newBufferedReader(newInputStreamReader(accept.getInputStream()));

Stringline;

while((line=br.readLine())!=null){

System.out.println(line);

要讓倆臺進(jìn)行互通就可以實現(xiàn)了,讓他們運(yùn)行到一起可以使用線程進(jìn)行封裝。

UDP使用的是

//創(chuàng)建發(fā)送端的Socket對象(DatagramSocket)

//創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包

//DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport)

//構(gòu)造一個數(shù)據(jù)包,發(fā)送長度為length的數(shù)據(jù)包到指定主機(jī)上的指定端口號。

使用UDP需要將ip地址固定成ipconfig所顯示的ip網(wǎng)關(guān)等內(nèi)容

DatagramSocketds=newDatagramSocket();

byte[]bys="hello,udp,我來了".getBytes();

DatagramPacketdp=newDatagramPacket(bys,bys.length,InetAddress.getByName("10.102.13.18"),10086);

//調(diào)用DatagramSocket對象的方法發(fā)送數(shù)據(jù)

//voidsend(DatagramPacketp)從此套接字發(fā)送數(shù)據(jù)報包

ds.send(dp);

System.out.println("已發(fā)送:"+newString(dp.getData(),0,dp.getLength()));

//關(guān)閉發(fā)送端

//voidclose()關(guān)閉此數(shù)據(jù)報套接字

ds.close();

DatagramSocketds=newDatagramSocket(10086);

while(true){

//創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)

byte[]bys=newbyte[1024];

DatagramPacketdp=newDatagramPacket(bys,bys.length);

//調(diào)用DatagramSocket對象的方法接收數(shù)據(jù)

ds.receive(dp);

System.out.println("-----");

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論