網路編程TCP(一)__編程

來源:互聯網
上載者:User
一:網路編程基礎知識 網路編程基礎知識: IP地址與連接埠號碼

網路中的電腦若需要實現相互連訊,必須為每台電腦指定標示號,通過標識號來指定接受資料和識別發送資料的電腦。TCP/IP協議中的“標示”即為IP地址。

一台電腦課同時運行多個網路程式,使用IP地址能夠將資料發送到電腦,卻不能夠保證將資料提交至哪個網路程式。因此每個被發送的網路資料包的頭部都設有"連接埠"部分,該部分為整數,用於表示將資料幀交給哪個應用程式去處理。同時必須為網路程式指定連接埠號碼,使不同的應用程式接受不同連接埠上的資料。同一台電腦不能存在多個使用同一連接埠的程式。

連接埠數的範圍在0~65535之間,其中在0~1023之間的連接埠號碼用於知名的網路服務和應用,1024以上的連接埠號碼用於普通網路應用程式,這樣做可以避免連接埠號碼代表網路程式串用。如某網路程式指定連接埠號碼為3900時,則其他網路程式發送的資料包中必須指明接收程式的連接埠號碼為3900,資料達到後電腦將根據資料包中的連接埠號碼進行接收。 TCP與UDP

TCP為傳輸控制通訊協定,uDP為使用者資料包通訊協定。

tcp是連線導向的銅須協議,他提供兩台電腦之間可靠無差的資料轉送。應用程式使用tcp通訊時,資料來源與目標之間將建立虛擬串連,串連一但建立,兩台電腦之間就可以將資料作為雙向位元組流進行互動。TCP操作模式類似於打電話,只有確認對方接通後,才開始通話,且雙方均能夠聽到對方的講話內容。

udp是不需連線的通訊協議,他不保證可靠資料的傳輸,但能夠實現向若干個目標發送資料的功能。例如當a主機向b主機發送資料時,資料將立即發出,無論主機b是否已準備接收。主機b的資料接收機制與主機a的發送機制類似,無論資料收到與否,它不再向主機a確認。upd操作模式類似於傳呼台向使用者發送資訊,傳呼台本身對使用者能否收到訊息不可控,使用者也不會向傳呼台反饋是否收到訊息。 socket簡介

socket(通訊端)是網路驅動層為應用程式提供介面和機制,其作用可以看做是為應用程式建立的港口碼頭。應用程式的任務是將裝載貨物的集裝箱(程式中通過網路發送的資料)放在港口碼頭上,剩餘工作交給貨運公司(驅動程式)去處理。接收資料時,應用程式同樣需要建立港口碼頭,貨物(資料)到達後,應用程式從碼頭(Socket)取走貨物即可。

雙向鏈路的一端稱為一個socket 二:TCP網路編程  TCP網路概述

使用tcp協議編寫網路程式,需要提供伺服器端程式和用戶端程式。伺服器端與用戶端程式的操作過程類似於114查號台與普通電話之間的關係,運行時必須先有114查號台(伺服器端程式),普通電話(用戶端程式)才能撥打、查號。在114查號台(伺服器端程式)有一個總機專門接聽撥打進來的電話,但總機並不直接實行對話,而是將電話分配到閒置分機進行處理。當沒有空閑分機時,提示客戶坐席忙、需要排隊等候,當等候服務的電話到達一定數量時,總機將徹底拒絕新撥打進來的電話。Java中的ServerSocket類似於114查號台總機。

tcp協議具體操作步驟如下:

(1)伺服器程式建立serversocket對象,調用accept()方法等待用戶端串連。

(2)用戶端程式建立socket對象並請求與伺服器建立串連。

(3)伺服器接收客戶的串連請求,並建立新的socket對象與用戶端建立串連專線。

(4)實現(2),(3)步驟中建立串連的兩個Socket在同一線程上對話。

(5)伺服器重新等待新的串連請求。 serverSocket類

tcp網路伺服器程式的編寫,需要使用serversocket類建立伺服器。ServerSocket類的主要方法:

 

servlersocket類主要方法
public  ServerSocket(int prot) 構造方法 建立ServerSocket執行個體
public Socket accept() 方法 等待用戶端串連
public InetAddress GetInetAddress() 方法 返回伺服器的ip地址
public boolean isClosed() 方法 返回ServerSocket的關閉狀態
public void  close() 方法 關閉ServerSocket

伺服器端每次運行時均需要調用accept()方法等待用戶端串連,該方法執行後服務端將進入阻塞狀態,知道用戶端再次串連。accept()方法的傳回型別為Socket。 Socket類

用戶端必須建立Socket對象來建立與伺服器的串連,每個Socket對象代表一個用戶端。

 

Socket類的常用方法
方法 類型 描述
public Socket(String host,int prot) 構造方法 構造Socket對象,同時指定要串連伺服器的主機名稱和連接埠號碼
public InputStream getInputStream() 方法 返回通訊端的輸入資料流
public OutputStream getOutPutStream() 方法 返回通訊端的輸出資料流
public boolean isClosed() 方法 判斷通訊端是否關閉
public void close() 方法 關閉此Socket

ServerSocket與Socket的關係如圖

tcp網路編程中的資訊使用輸入輸出資料流的形式傳遞。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.