1. <rp id="zsypk"></rp>

      2. 實(shí)用文檔>socket技術(shù)要點(diǎn)總結(jié)

        socket技術(shù)要點(diǎn)總結(jié)

        時(shí)間:2024-09-01 19:38:06

        socket技術(shù)要點(diǎn)總結(jié)

        socket技術(shù)要點(diǎn)總結(jié)

        socket技術(shù)要點(diǎn)總結(jié)

          篇一:socket技術(shù)總結(jié)

          Socket技術(shù)要點(diǎn)總結(jié)

          1、什么是TCP/IP、UDP,它的結(jié)構(gòu)是什么?

          1.1 TCP/IP(Transmission Control Protocol/Internet Protocol)即傳輸控制協(xié)議/網(wǎng)間協(xié)議,是一個(gè)工業(yè)標(biāo)準(zhǔn)的協(xié)議集,它是為廣域網(wǎng)(WANs)設(shè)計(jì)的。 TCP 是傳輸控制協(xié)議,是一個(gè)面向連接的協(xié)議,為用戶進(jìn)程提供可靠的全雙工字節(jié)流。TCP 套接字是一種流套接字(stream socket).TCP關(guān)心確認(rèn),超時(shí)和重傳之類的細(xì)節(jié)。大多數(shù)網(wǎng)絡(luò)應(yīng)用程序都在使用TCP。

          注意:TCp既可以使用IPv4,也可以使用IPv6.

          1.2UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議。它是屬于TCP/IP協(xié)議族中的一種。

          UDP是一個(gè)無連接協(xié)議,UDP套接字是一種數(shù)據(jù)報(bào)套接字(datagram socket)。UDP數(shù)據(jù)報(bào)不能保證最終到達(dá)它們的目的地。和TCP一樣,UDP既可以使用IPv4,也可以使用ipv6.

          1.3 TCP和UDP的區(qū)別?可靠性

          在TCP/IP協(xié)議中,TCP協(xié)議通過三次握手建立一個(gè)可靠的連接(像打電話) 第一次握手:客戶端嘗試連接服務(wù)器,向服務(wù)器發(fā)送syn包(同步序列編號(hào)Synchronize Sequence Numbers),syn=j,客戶端進(jìn)入SYN_SEND狀態(tài)等待服務(wù)器確認(rèn)

          第二次握手:服務(wù)器接收客戶端syn包并確認(rèn)(ack=j+1),同時(shí)向客戶端發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)

          第三次握手:第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手

          定睛一看,服務(wù)器socket與客戶端socket建立連接的部分其實(shí)就是大名鼎鼎的三次握手

          而UDP是不可靠的連接,像是寫信,對(duì)方不一定能夠收到信的內(nèi)容;

          1.4 TCP/IP、UDP的分層:

          由上可以看到TCP/IP協(xié)議族包括應(yīng)用層、運(yùn)輸層、網(wǎng)絡(luò)層、鏈路層。

          2.socket

          2.1 套接字(socket)概念 套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。

          應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時(shí),TCP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè) TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了套接字(Socket)接口。應(yīng)用層可以和傳輸層通過Socket接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。

          2.2 建立socket連接

          建立Socket連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶端,稱為ClientSocket,另一個(gè)運(yùn)行于服務(wù)器端,稱為ServerSocket。

          套接字之間的連接過程分為三個(gè)步驟:服務(wù)器監(jiān)聽,客戶端請(qǐng)求,連接確認(rèn)。 服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請(qǐng)求。

          客戶端請(qǐng)求:指客戶端的套接字提出連接請(qǐng)求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號(hào),然后就向服務(wù)器端套接字提出連接請(qǐng)求。

          連接確認(rèn):當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求時(shí),就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。

          服務(wù)端: ServerSocket serverSocket = new ServerSocket(PORT);

          Socket client = serverSocket.accept();

          客戶端:Socketsocket = new Socket(IP_ADDR, PORT);

          socket.getInputStream()、socket.getInputStream()獲取到流傳遞數(shù)據(jù)信息; 補(bǔ)充:

          HTTP連接

          HTTP協(xié)議即超文本傳送協(xié)議(Hypertext Transfer Protocol ),是Web聯(lián)網(wǎng)的基礎(chǔ),也是手機(jī)聯(lián)網(wǎng)常用的協(xié)議之一,HTTP協(xié)議是建立在TCP協(xié)議之上的一種應(yīng)用。 HTTP連接最顯著的特點(diǎn)是客戶端發(fā)送的每次請(qǐng)求都需要服務(wù)器回送響應(yīng),在請(qǐng)求結(jié)束后,會(huì)主動(dòng)釋放連接。從建立連接到關(guān)閉連接的過程稱為“一次連接”。

          1)在HTTP 1.0中,客戶端的每次請(qǐng)求都要求建立一次單獨(dú)的連接,在處理完本次請(qǐng)求后,就自動(dòng)釋放連接。

          2)在HTTP 1.1中則可以在一次連接中處理多個(gè)請(qǐng)求,并且多個(gè)請(qǐng)求可以重疊進(jìn)行,不需要等待一個(gè)請(qǐng)求結(jié)束后再發(fā)送下一個(gè)請(qǐng)求。

          由于HTTP在每次請(qǐng)求結(jié)束后都會(huì)主動(dòng)釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態(tài),需要不斷地向服務(wù)器發(fā)起連接請(qǐng)求。通常的做法是即使不需要獲得任何數(shù)據(jù),客戶端也保持每隔一段固定的時(shí)間向服務(wù)器

          篇二:Socket初步總結(jié)文檔

          Socket

          說明

          所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句

          柄。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。

          以J2SDK-1.3為例,Socket和ServerSocket類庫位于java.net包中。

          ServerSocket用于服務(wù)器端,Socket是建立網(wǎng)絡(luò)連接時(shí)使用的。在連接成功時(shí),應(yīng)用程序兩端都會(huì)產(chǎn)生一個(gè)Socket實(shí)例,操作這個(gè)實(shí)例,完成所需的會(huì)話。對(duì)于一個(gè)網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不因?yàn)樵诜⻊?wù)器端或在客戶端而產(chǎn)生不同級(jí)別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。

          重要的Socket API:

          java.net.Socket繼承于java.lang.Object,有八個(gè)構(gòu)造器,其方法并不多,下

          面介紹使用最頻繁的三個(gè)方法,其它方法大家可以見JDK-1.3文檔。

          . Accept方法用于產(chǎn)生"阻塞",直到接受到一個(gè)連接,并且返回一個(gè)客戶端的

          Socket對(duì)象實(shí)例。"阻塞"是一個(gè)術(shù)語,它使程序運(yùn)行暫時(shí)"停留"在這個(gè)地方,直到一個(gè)會(huì)話產(chǎn)生,然后程序繼續(xù);通常"阻塞"是由循環(huán)產(chǎn)生的。

          . getInputStream方法獲得網(wǎng)絡(luò)連接輸入,同時(shí)返回一個(gè)InputStream對(duì)象實(shí)例

          . getOutputStream方法連接的另一端將得到輸入,同時(shí)返回一個(gè)OutputStream對(duì)象實(shí)例。

          注意:其中g(shù)etInputStream和getOutputStream方法均會(huì)產(chǎn)生一個(gè)IOException,它必須被捕獲,因?yàn)樗鼈兎祷氐牧鲗?duì)象,通常都會(huì)被另一個(gè)流對(duì)象使用。

          通信方式

          主要有以下三大類:

          (一)SERVER/CLIENT方式

          1.一個(gè)Client方連接一個(gè)Server方,或稱點(diǎn)對(duì)點(diǎn)(peer to peer)=892

          2 .多個(gè)Client方連接一個(gè)Server方,這也是通常的并發(fā)服務(wù)器方式。

          3.一個(gè)Client方連接多個(gè)Server方,這種方式很少見,主要用于一個(gè)客戶向多個(gè)服務(wù) 器發(fā)送請(qǐng)求情況。

          (二)連接方式

          1.長連接

          Client方與Server方先建立通訊連接,連接建立后不斷開,然后再進(jìn)行報(bào)文發(fā)送和接收。這種方式下由于通訊連接一直存在,可以用下面命令查看連接是否建立:

          netstat –f inet|grep 端口號(hào)(如5678)。此種方式常用于點(diǎn)對(duì)點(diǎn)通訊。

          2.短連接

          Client方與Server每進(jìn)行一次報(bào)文收發(fā)交易時(shí)才進(jìn)行通訊連接,交易完畢后立即斷開連接。此種方式常用于一點(diǎn)對(duì)多點(diǎn)通訊,比如多個(gè)Client連接一個(gè)Server.

          (三)發(fā)送接收方式

          1.異步

          報(bào)文發(fā)送和接收是分開的,相互獨(dú)立的,互不影響。這種方式又分兩種情況:

          (1)異步雙工:接收和發(fā)送在同一個(gè)程序中,有兩個(gè)不同的子進(jìn)程分別負(fù)責(zé)發(fā)送和接收

          (2)異步單工:接收和發(fā)送是用兩個(gè)不同的程序來完成。

          2.同步

          報(bào)文發(fā)送和接收是同步進(jìn)行,既報(bào)文發(fā)送后等待接收返回報(bào)文。同步方式一般需要考慮超時(shí)問題,即報(bào)文發(fā)上去后不能無限等待,需要設(shè)定超時(shí)時(shí)間,超過該時(shí)間發(fā)送方不再等待讀返回報(bào)文,直接通知超時(shí)返回。

          實(shí)際通信方式是這三類通信方式的組合。比如一般書上提供的TCP/IP范例程序大都是同步短連接的SERVER/CLIENT程序。有的組合是基本不用的,比較常用的有價(jià)值的組合是以下幾種:

          同步短連接Server/Client

          同步長連接Server/Client

          異步短連接Server/Client

          異步長連接雙工Server/Client

          異步長連接單工Server/Client

          其中異步長連接雙工是最為復(fù)雜的一種通信方式,有時(shí)候經(jīng)常會(huì)出現(xiàn)在不同銀行或不同城市之間的兩套系統(tǒng)之間的通信。比如金卡工程。由于這幾種通信方式比較固定,所以可以預(yù)先編制這幾種通信方式的模板程序。

          報(bào)文格式

          通信報(bào)文格式多樣性更多,相應(yīng)地就必須設(shè)計(jì)對(duì)應(yīng)的讀寫報(bào)文的接收和發(fā)送報(bào)文函數(shù)。

          (一)阻塞與非阻塞方式

          1.非阻塞方式

          讀函數(shù)不停地進(jìn)行讀動(dòng)作,如果沒有報(bào)文接收到,等待一段時(shí)間后超時(shí)返回,這種情況一般需要指定超時(shí)時(shí)間。

          2.阻塞方式

          如果沒有報(bào)文接收到,則讀函數(shù)一直處于等待狀態(tài),直到有報(bào)文到達(dá)。

          (二)循環(huán)讀寫方式

          1.一次直接讀寫報(bào)文

          在一次接收或發(fā)送報(bào)文動(dòng)作中一次性不加分別地全部讀取或全部發(fā)送報(bào)文字節(jié)。

          2.不指定長度循環(huán)讀寫

          這一般發(fā)生在短連接進(jìn)程中,受網(wǎng)絡(luò)路由等限制,一次較長的報(bào)文可能在網(wǎng)絡(luò)傳輸過程中被分解成了好幾個(gè)包。一次讀取可能不能全部讀完一次報(bào)文,這就需要循環(huán)讀報(bào)文,直到讀完為止。

          3.帶長度報(bào)文頭循環(huán)讀寫

          這種情況一般是在長連接進(jìn)程中,由于在長連接中沒有條件能夠判斷循環(huán)讀寫什么時(shí)候結(jié)束,所以必須要加長度報(bào)文頭。讀函數(shù)先是讀取報(bào)文頭的長度,再根據(jù)這個(gè)長度去讀報(bào)文.實(shí)際情況中,報(bào)頭的碼制格式還經(jīng)常不一樣,如果是非ASCII碼的報(bào)文頭,還必須 轉(zhuǎn)換成ASCII,常見的報(bào)文頭碼制有:

          (1)n個(gè)字節(jié)的ASCII碼

          (2)n個(gè)字節(jié)的BCD碼

          (3)n個(gè)字節(jié)的網(wǎng)絡(luò)整型碼

          Socket通信模型

          ServerSocket類例子

          int PORT = 8888; // 偵聽端口

          // 創(chuàng)建ServerSocket

          ServerSocket serverSocket = new ServerSocket(PORT);// 開始循環(huán)

          while (true) {

          // 等待連接

          Socket socket = serverSocket.accept();

          // 處理鏈接的線程類

          ServerThread st = new ServerThread(socket);

          // 啟動(dòng)線程處理

          new Thread(st).start();

          }

          客戶端的例子

          int PORT = 8888; // 偵聽端口

          // 建立連接

          socket = new Socket(“127.0.0.1”, 8888);

          // 輸入數(shù)據(jù)的讀取

          BufferedReader

          netIn=newBufferedReader(new

          InputStreamReader(socket.getInputStream()));

          // 寫入數(shù)據(jù)

          PrintWriter netOut = new PrintWriter(socket.getOutputStream());

          篇三:socket編程實(shí)驗(yàn)心得體會(huì)

          實(shí)驗(yàn)心得體會(huì)

          在本次實(shí)驗(yàn)中,我通過對(duì)網(wǎng)絡(luò)課上所學(xué)知識(shí)的應(yīng)用,學(xué)到了很多實(shí)踐中的知識(shí)。并且加深了我對(duì)課本知識(shí)的理解和認(rèn)識(shí),在實(shí)驗(yàn)過程中,更容易記憶和深入理解各種協(xié)議的工作以及在網(wǎng)絡(luò)編程中應(yīng)該注意的一系列問題。

          我們的第一個(gè)實(shí)驗(yàn)是對(duì)ARP、ICMP、FTP和HTTP協(xié)議的分析和驗(yàn)證。在利用軟件Etherpeek抓取在主機(jī)通信中的報(bào)文,得到了很多的關(guān)于這些協(xié)議的具體參數(shù)。在課程學(xué)習(xí)過程中,書本和老師給我的感覺就是太枯燥,通過課本的學(xué)習(xí)根本沒有辦法理解各種協(xié)議的工作細(xì)節(jié)。有很多的細(xì)微之處是想不通的。但是,在本次實(shí)驗(yàn)中,我就通過各種報(bào)文的分析,看到了網(wǎng)絡(luò)中不同層次協(xié)議之間的協(xié)做過程。對(duì)應(yīng)不同層之間就是通過協(xié)議來使用,我對(duì)整個(gè)網(wǎng)路的大體架構(gòu)有了一個(gè)統(tǒng)籌的了解,雖然對(duì)很多的更深入的知識(shí)不是很了解,但是比我在課上學(xué)的東西要更有趣,而且容易學(xué)習(xí),更能夠我學(xué)習(xí)的興趣。 第二個(gè)實(shí)驗(yàn)是Socket編程實(shí)驗(yàn)。在編寫網(wǎng)絡(luò)程序之前,我對(duì)網(wǎng)路通信可以說一無所知,根本不知道那些網(wǎng)路上的程序是怎么通過網(wǎng)路進(jìn)行通信的。在本次實(shí)驗(yàn)中,終于揭開了他們神秘的面紗。當(dāng)然在實(shí)驗(yàn)中出現(xiàn)了很多的插曲,我是在Linux環(huán)境下編寫的程序,很多技術(shù)方面的問題都無法解決。查閱書籍和網(wǎng)上咨詢才弄懂了他們的來龍去脈,最終是將我的程序編寫完了。開始接觸網(wǎng)路編程時(shí),那是一頭霧水,根本不知從何下手。在看了輔導(dǎo)教員給我們程序之后才有了很多的起色,才能夠自己編寫程序。在網(wǎng)絡(luò)編程中,我最深的體會(huì)就是對(duì)具體的內(nèi)部細(xì)節(jié)不熟悉,導(dǎo)致在調(diào)試的過程中感覺到很無力。在很多函數(shù)的作用下,經(jīng)常就是一團(tuán)亂麻。之后,我每次編寫之前就是將用到的函數(shù)的用法溫習(xí)一下,最后還是能夠解決很多的問題的。

          本次試驗(yàn)是我們學(xué)習(xí)網(wǎng)路的第一次。以前的課程從來沒有接觸到網(wǎng)路方面的知識(shí)。這次的新知識(shí)對(duì)我們的挑戰(zhàn)還算不是太大,通過我們的努力,所有的困難時(shí)被克服掉了。其實(shí),實(shí)驗(yàn)應(yīng)該是我們的重點(diǎn),在以后的工作中要的就是我們的實(shí)際的動(dòng)手能力,如果我們?cè)趯W(xué)習(xí)期間就是只學(xué)了書本上的知識(shí),那樣對(duì)理論的了解是不夠深刻的,只有通過實(shí)驗(yàn)才能激發(fā)我們的學(xué)習(xí)興趣?傊,我覺得實(shí)驗(yàn)才是檢驗(yàn)理論的唯一標(biāo)準(zhǔn)。

        【socket技術(shù)要點(diǎn)總結(jié)】相關(guān)文章:

        冬天養(yǎng)牛技術(shù)要點(diǎn)總結(jié)07-25

        青蝦養(yǎng)殖技術(shù)要點(diǎn)02-21

        學(xué)齡前寶寶飲食要點(diǎn)總結(jié)03-06

        技師技術(shù)總結(jié)范文精選03-19

        高中通用技術(shù)的教學(xué)總結(jié)04-18

        調(diào)車長技師技術(shù)總結(jié)04-27

        申報(bào)技師技術(shù)的總結(jié)5篇02-25

        居民死亡原因醫(yī)學(xué)證明填寫要點(diǎn)參閱02-27

        健身房跑步減肥計(jì)劃的三要點(diǎn)03-19

        掘進(jìn)技術(shù)員工作總結(jié)02-21

        用戶協(xié)議
        99热这里只有精品国产7_欧美色欲色综合色欲久久_中文字幕无码精品亚洲资源网久久_91热久久免费频精品无码
          1. <rp id="zsypk"></rp>