老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)
Socket簡介:
Socket稱為“套接字”,描述IP地址和端口。在Internet上的主機(jī)一般運(yùn)行多個服務(wù)軟件,同時提供幾種服務(wù),每種服務(wù)都打開一個Socket,并綁定在一個端口上,不同的端口對應(yīng)于不同的服務(wù)。Socket和ServerSocket類位于java.net包中。ServerSocket用于服務(wù)端,Socket是建立網(wǎng)絡(luò)連接時使用的。連接成功時,應(yīng)用程序兩端都會產(chǎn)生一個Socket實(shí)例,通過操作這個實(shí)例完成所需會話。
Socket常用方法:
-int getLocalPort() 獲取本地使用的端口號
-InetAddress getLocalAddress() 獲取套接字綁定的本地地址
-int getPort() 獲取遠(yuǎn)端使用的端口號
-InetAddress.getInetAddress() 獲取套接字綁定的遠(yuǎn)端地址
InetAddress常用方法:
-String getCanonicalHostName() 獲取此IP地址的完全限定域名。
-String getHostAddress() 返回IP地址字符串
//獲取本地地址和端口號: public void testSocket() throws Exception{ Socket socket=new Socket("localhost",8088); InetAddress add=socket.getLocalAddress(); System.out.println(add.getCanonicalHostName()); System.out.println(add.getHostName()); System.out.println(add.getLocalPort()); }
//獲取遠(yuǎn)端地址和端口號: public static void testSocket() throws Exception{ Socket socket=new Socket("localhost",8088); InetAddress inetAdd=socket.getInetAddress(); System.out.println(inetAdd.getCanonicalHostName()); System.out.println(inetAdd.getHostName()); System.out.println(socket.getLocalPort()); }
獲取網(wǎng)絡(luò)輸入流和網(wǎng)絡(luò)輸出流
通過Socket獲取輸入流與輸出流,主要使用一下兩個方法
-InputStream getInputStream() 用于返回此套接字的輸入流
-OutStream getOutputStream() 用于返回此套接字的輸出流
public static void testSocket() throws Exception { Socket socket = new Socket("localhost", 8088); OutputStream out = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8"); PrintWriter pw = new PrintWriter(osw, true); pw.println("輸出的內(nèi)容");//發(fā)送內(nèi)容 InputStream in=socket.getInputStream(); InputStreamReader isr=new InputStreamReader(in, "UTF-8"); BufferedReader br=new BufferedReader(isr); br.readLine();//讀取接到的內(nèi)容 }
注意:當(dāng)使用完Socket進(jìn)行通訊完畢后,要關(guān)閉Socket以釋放系統(tǒng)資源
-void close() 關(guān)閉套接字,同時也代表關(guān)閉了獲取的輸入與輸出流。
TCP與UDP的區(qū)別
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。聊天工具使用TCP協(xié)議
UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去! 游戲多使用UDP協(xié)議
以上這篇老生常談Java網(wǎng)絡(luò)編程TCP通信(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Java在netty中實(shí)現(xiàn)線程和CPU綁定
這篇文章主要介紹了基于Java在netty中實(shí)現(xiàn)線程和CPU綁定,文章圍繞主題的相關(guān)內(nèi)容展開詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05淺析java并發(fā)中的Synchronized關(guān)鍵詞
這篇文章主要介紹了java并發(fā)中的Synchronized關(guān)鍵詞,本文通過思路代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02springboot整合spring-data-redis遇到的坑
使用springboot整合redis,使用默認(rèn)的序列化配置,然后使用redis-client去查詢時查詢不到相應(yīng)的key.問題出在哪,怎么解決呢?下面小編給大家?guī)砹藄pringboot整合spring-data-redis遇到的坑,需要的的朋友參考下吧2017-04-04Kotlin 語言中調(diào)用 JavaScript 方法實(shí)例詳解
這篇文章主要介紹了Kotlin 語言中調(diào)用 JavaScript 方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06Quartz定時任務(wù)管理方式(動態(tài)添加、停止、恢復(fù)、刪除定時任務(wù))
這篇文章主要介紹了Quartz定時任務(wù)管理方式(動態(tài)添加、停止、恢復(fù)、刪除定時任務(wù)),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Spring?AOP實(shí)現(xiàn)多數(shù)據(jù)源動態(tài)切換
本文主要介紹了Spring?AOP實(shí)現(xiàn)多數(shù)據(jù)源動態(tài)切換,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03詳解springMVC之與json數(shù)據(jù)交互方法
本篇文章主要介紹了詳解springMVC之與json數(shù)據(jù)交互方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05Mybatis中如何進(jìn)行批量更新(updateBatch)
這篇文章主要介紹了Mybatis中如何進(jìn)行批量更新(updateBatch),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05IDEA 中使用 Big Data Tools 連接大數(shù)據(jù)組件
本文主要介紹了IDEA 中使用 Big Data Tools 連接大數(shù)據(jù)組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05