顏慧
摘要:該文介紹了網(wǎng)絡(luò)編程中端口和套接字等相關(guān)的概念,并探討了網(wǎng)絡(luò)主機通過TCP套接字和UDP套接字進行通信的基本流程、適用場合,以及Java實現(xiàn)套接字編程相關(guān)的類和實現(xiàn)方法。
關(guān)鍵詞:Java;網(wǎng)絡(luò)編程;端口;TCP套接字;UDP 套接字
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)20-0104-02
Abstract: This paper introduces ports and sockets and other related concepts in the network programming, and introduces the network hosts how to communication to each other through the TCP socket and UDP socket, and how to programming to realize TCP Socket and UDP Socket.
Key words: Java; network programming; port; TCP Socket; UDP Socket
在網(wǎng)絡(luò)編程中,經(jīng)常需要在兩臺計算機之間進行通信,這就涉及怎么定位網(wǎng)絡(luò)中的計算機和唯一地標識計算機上的進程。在Internet中使用的網(wǎng)絡(luò)通信協(xié)議是TCP/IP協(xié)議,它是一種四層的體系結(jié)構(gòu),分為應(yīng)用層、傳輸層、網(wǎng)際層和網(wǎng)絡(luò)接口層。在Internet中用IP地址來唯一地標識一臺網(wǎng)絡(luò)中的計算機,那么怎么唯一地標識計算機中的進程呢?
端口是應(yīng)用層和傳輸層之間的通信協(xié)議接口,端口可用來唯一地標識計算機上的進程。由于傳輸層有TCP和UDP兩個協(xié)議,因此端口又可分為TCP端口和UDP端口,每臺主機上最多可有65536個TCP端口和65536個UDP端口,也就是說在每臺計算機最多可以區(qū)分65536個TCP進程和65536個UDP進程。
套接字Socket是網(wǎng)絡(luò)主機的兩個進程進行通信連接的端點,可以在指定計算機的某個空閑端口上創(chuàng)建套接字,那么網(wǎng)絡(luò)主機可以通過套接字在網(wǎng)絡(luò)中定位計算機及端口,并且進行數(shù)據(jù)的發(fā)送和接收。根據(jù)使用的傳輸協(xié)議,套接字又可以分為TCP套接字和UDP套接字。在網(wǎng)絡(luò)編程中,套接字編程是比較常用的。本文介紹了網(wǎng)絡(luò)主機利用TCP套接字和UDP套接字進行通信的流程,并介紹了在Java中是如何實現(xiàn)TCP套接字和UDP套接字編程的。
1 TCP Socket
TCP Socket 是基于TCP協(xié)議(傳輸控制協(xié)議)的套接字。TCP協(xié)議是面向連接的傳輸協(xié)議,在進行通信前必須先建立通信連接,它是一種可靠的傳輸協(xié)議,傳輸數(shù)據(jù)的質(zhì)量比較高,適用于傳輸大量數(shù)據(jù)的場合,但是它的傳輸速率比較慢。在Java中,提供了java.net.ServerSocket和java.net.Socket等類來實現(xiàn)TCP套接字。
ServerSocket類用于服務(wù)器端代碼中,它的作用是啟動服務(wù)器端的TCP端口,并且監(jiān)聽該端口是否有連接請求,如果有連接請求,則接受連接請求,并且返回一個本地Socket對象用來與對方進行通信。
Socket類用于兩臺網(wǎng)絡(luò)主機之間進行通信,在客戶端代碼和服務(wù)端代碼中都需要Socket類的對象。在客戶端代碼中的Socket還負責(zé)向指定的服務(wù)器上的TCP端口發(fā)出連接請求,如果服務(wù)器接受了連接請求,則可使用Socket與對方進行通信。
網(wǎng)絡(luò)主機使用TCP套接字的通信流程如圖1所示:
服務(wù)端和客戶端都可以向?qū)Ψ桨l(fā)送數(shù)據(jù)或者接收數(shù)據(jù),發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的過程可以是一個持續(xù)的過程,使用循環(huán)就可以實現(xiàn)這個持續(xù)的過程。當(dāng)服務(wù)端需要處理多個客戶的連接請求的時候,就需要用到多線程了,為每個客戶單獨創(chuàng)建一個套接字來處理客戶的連接請求,并且進行數(shù)據(jù)的發(fā)送和接收。在javax.net包中還提供了增強版的SSLServerSocket和SSLSocket,用來構(gòu)造安全的套接字對象。
2 UDP Socket
UDP Socket是使用UDP協(xié)議(用戶數(shù)據(jù)報協(xié)議)的套接字。UDP協(xié)議是無連接的傳輸協(xié)議,在雙方進行通信之前不需要事先建立連接,它提供的傳輸服務(wù)是簡單的、不太可靠的,但是傳輸數(shù)據(jù)的速度比較快,適用于數(shù)據(jù)量比較少、對數(shù)據(jù)的實時性要求比較高的場合。
在Java中提供了java.net.DatagramSocket和java.net.DatagramPacket等類來實現(xiàn)UDP套接字。DatagramSocket類用來啟動UDP端口,通過該端口進行數(shù)據(jù)的發(fā)送和接收;DatagramPacket用來創(chuàng)建通信時所發(fā)送和接收的數(shù)據(jù)報對象。
網(wǎng)絡(luò)主機使用UDP套接字進行通信的流程如圖2所示,每臺網(wǎng)絡(luò)主機均可進行數(shù)據(jù)報的發(fā)送和接收,可以使用多線程來實現(xiàn)數(shù)據(jù)報的同時收發(fā),也可以用循環(huán)來實現(xiàn)持續(xù)地發(fā)送和接收數(shù)據(jù)報的過程。
3 結(jié)束語
文中探討了Java中的套接字編程,闡述了TCP套接字和UDP套接字的基本工作流程、適用場合以及編程的基本步驟。在實際的應(yīng)用中,應(yīng)根據(jù)問題的數(shù)據(jù)量大小、對數(shù)據(jù)質(zhì)量的要求、傳輸速率的要求等來考慮使用TCP套接字還是UDP套接字來進行主機的通信。
參考文獻:
[1] 朱輝. Java網(wǎng)絡(luò)程序設(shè)計[M]. 西安: 西安電子科技大學(xué)出版社, 2015.
[2] 戴歆. JAVA TCP/IP Socket 網(wǎng)絡(luò)通信編程研究[J]. 電腦知識與技術(shù), 2013(9).
[3] 陳浩, 張偉. 基于javasocket 的TCP/IP網(wǎng)絡(luò)編程[J]. 計算機光盤軟件與應(yīng)用, 2013(2).