day12網路程式設計

2021-09-26 03:57:27 字數 4365 閱讀 5418

day12網路程式設計

一, 網路通訊協議

​ tcp/ip協議中的四層分別是應用層、傳輸層、網路層和鏈路層,每層分別負責不同的通訊功能.

​ 鏈路層:鏈路層是用於定義物理傳輸通道,通常是對某些網路連線裝置的驅動協議,例如針對光纖、網線提供的驅動。

​ 網路層:網路層是整個tcp/ip協議的核心,它主要用於將傳輸的資料進行分組,將分組資料傳送到目標計算機或者網路。

​ 運輸層:主要使網路程式進行通訊,在進行網路通訊時,可以採用tcp協議,也可以採用udp協議。

​ 應用層:主要負責應用程式的協議,例如httpftp.

1ip位址和埠號

ip位址,它可以唯一標識一台計算機

​ 通過ip位址可以連線到指定計算機,但如果想訪問目標計算機中的某個應用程式,還需要指定埠號,計算機中,不同的應用程式是通過埠號區分的。埠號是用兩個位元組(16位的二進位制數)表示的,它的取值範圍是065535,其中,01023之間的埠號用於一些知名的網路服務和應用,使用者的普通應用程式需要使用1024以上的埠號,從而避免埠號被另外乙個應用或服務所占用。

1.2inetaddress類

public class example01 	

}

二,tcp:transmission control protocol 稱為傳輸控制協議

​ tcp通訊是嚴格區分客戶端與伺服器端的,在通訊時,必須先由客戶端去連線伺服器端才能實現通訊,伺服器端不可以主動連線客戶端,並且伺服器端程式需要事先啟動,等待客戶端的連線。

​ 在jdk中提供了兩個類用於實現tcp程式,乙個是serversocket類,用於表示伺服器端,乙個是socket類,用於表示客戶端。

​ 通訊時,首先建立代表伺服器端的serversocket物件,該物件相當於開啟乙個服務,並等待客戶端的連線,然後建立代表客戶端的socket物件向伺服器端發出連線請求,伺服器端響應請求,兩者建立連線開始通訊。

2.1serversocket

​ serversocket(int port): 建立繫結到特定埠的伺服器套接字

​ 使用構造方法在建立serversocket物件使時,就可以使其繫結到乙個指定的埠號上(引數port就是埠號)。

​ 方法:

​ socket accept() 偵聽並接受到此套接字的連線

​ inetaddress getinetaddress() 返回此伺服器套接字的本地位址

​ serversocket物件負責監聽某台計算機的某個埠號,在建立serversocket物件後,需要繼續呼叫該物件的accept()方法,接收來自客戶端的請求。當執行了accept()方法之後,伺服器端程式會發生阻塞,直到客戶端發出連線請求,accept()方法才會返回乙個scoket物件用於和客戶端實現通訊,程式才能繼續向下執行。

​ 2.2,socket類

​ 構造方法:

​ socket(string host,int port) 建立乙個流套接字並將其連線到指定主機上的指定埠號

方法宣告功能描述

int getport()

該方法返回乙個int型別物件,該物件是socket物件與伺服器端連線的埠號

inetaddress getlocaladdress()

該方法用於獲取socket物件繫結的本地ip位址,並將ip位址封裝成inetaddress型別的物件返回

void close()

該方法用於關閉socket連線,結束本次通訊。在關閉socket之前,應將與socket相關的所有的輸入/輸出流全部關閉,這是因為乙個良好的程式應該在執行完畢時釋放所有的資源

inputstream getinputstream()

該方法返回乙個inputstream型別的輸入流物件,如果該物件是由伺服器端的socket返回,就用於讀取客戶端傳送的資料,反之,用於讀取伺服器端傳送的資料

outputstream getoutputstream()

該方法返回乙個outputstream型別的輸出流物件,如果該物件是由伺服器端的socket返回,就用於向客戶端傳送資料,反之,用於向伺服器端傳送資料

在socket類的常用方法中,getinputstream()和getoutstream()方法分別用於獲取輸入流和輸出流。當客戶端和服務端建立連線後,資料是以io流的形式進行互動的,從而實現通訊。

[外鏈轉存失敗(img-ty74zprn-1565696626270)(c:\users\李紅興\desktop\markdow筆記\5.png)]

要實現tcp通訊需要建立乙個伺服器端程式和乙個客戶端程式,為了保證資料傳輸的安全性,首先需要實現伺服器端程式。

/* * tcp 伺服器端

* * 1,建立伺服器serversocket物件(指定伺服器端口號)

* 2,開啟伺服器了,等待客戶端的連線,當客戶端連線後,可以獲取到連線伺服器的客戶端socket物件

* 3,給客戶端反饋資訊

* 4,關閉流資源

*/public class tcpserver

}完成了伺服器端程式的編寫,接下來編寫客戶端程式。

/* * tcp 客戶端

* * 1,建立客戶端socket物件,(指定要連線的伺服器位址與埠號)

* 2,獲取伺服器端的反饋回來的資訊

* 3,關閉流資源

*/public class tcpclient

}

檔案上傳案例一:

/*

* 檔案上傳 伺服器端

* */

public class tcpserver

//-----------------反饋資訊---------------------

//10,獲取socket的輸出流, 作用:寫反饋資訊給客戶端

outputstream out = clientsocket.getoutputstream();

//11,寫反饋資訊給客戶端

out.write("上傳成功".getbytes());

out.close();

fileout.close();

in.close();

clientsocket.close();

}} 編寫客戶端,完成上傳

/* * 檔案上傳 客戶端

* * public void shutdownoutput() 禁用此socket的輸出流,間接的相當於告知了伺服器資料寫入完畢

*/public class tcpclient

//6,客戶端傳送資料完畢,結束socket輸出流的寫入操作,告知伺服器端

socket.shutdownoutput();

//-----------------反饋資訊---------------------

//12,獲取socket的輸入流 作用: 讀反饋資訊

inputstream in = socket.getinputstream();

//13,讀反饋資訊

byte info = new byte[1024];

//把反饋資訊儲存到info陣列中,並記錄位元組個數

int length = in.read(info);

//顯示反饋結果

system.out.println( new string(info, 0, length) );

//關閉流

in.close();

filein.close();

out.close();

socket.close();

}}

檔案上傳案例二:

public class filecilent01 

//關閉流

out.close();

socktclient.close();

fis.close();

}}public class filecilent

//關閉流

out.close();

socktclient.close();

fis.close();

}}public class filereceive

accept.close();

in.close();

fos.close();

}catch (ioexception e)

}}.start();}}

}

}

accept.close();

in.close();

fos.close();

}catch (ioexception e)

}}.start();

}}

12 網路程式設計

httpget和httppost的使用步驟 1.建立httpget或httppost物件,將要請求的url通過構造方法傳入httpget或httppost物件。2.使用defaulthttpclient.execute方法傳送http get或http post請求,並返回httpresponse物...

C程式設計基礎day12

r 是每次輸出都在最左端。fflush stdout 因為列印的時候不會立即放在螢幕,而是先放在記憶體,再放到快取區等到快取區滿了的時候才放在螢幕。呼叫這個函式後即便快取區沒滿也會將printf的內容顯示到螢幕上。使用快取區是為了提高效率,避免太頻繁地從記憶體往螢幕寫東西,而是先把要顯示的東西存到快...

牛客網錯題 Day12

date 2020 9 25 6 46 stringbuffer public class test16 stringbuffer stringbuffer和stringbuilder的預設大小為16 arraylist和linkedlist的預設大小10 節點流 可以從或向乙個特定地方讀寫資料。檔...