日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

TCP/IP协议的一个具体实现Socket

發布時間:2025/7/14 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP/IP协议的一个具体实现Socket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java?中Socket的用法

TCP/IP協議

兩個不同的協議,放在一起說。IP協議是用來查找地址的,對應網際互連層;TCP協議是用來規范傳輸規則的,對應傳輸層。

TCP在傳輸之前會進行三次溝通(三次握手),傳完數據斷開的時候會進行四次溝通(四次揮手)

兩個序號和三個標志位

seq(sequence number)表示所傳數據的序號;TCP傳輸時每一個字節都由一個序號,發送數據時會將數據的第一個序號發送給對方,接收方會按序號檢查數據是否接收完整了。(如不完整,則重新發送)

ack(acknoledgement number)表示確認號,接收端用它來給發送端反饋已經成功接收到的數據的信息,它的值為希望接收的下一個數據包起始序號(該序號值前面的數據已經接收到了)

ACK:確認位,只有ACK=1時,ack才起作用。?正常通信時ACK=1,第一次發起請求時因為沒有需要確認接收的數據(ACK=0)

SYN:同步位,用于在建立連接時同步序號。當接收端接收到SYN=1報文時會直接將ack設置為接收到的seq+1的值

SYN會在前兩次握手時都為1(通信的雙方的ack都需要設置一個初始值)

FIN:終止位,用來在數據傳輸完畢后釋放連接

TCP傳輸是雙全工模式,傳輸雙方是對等的,可以同時傳輸數據。

四次揮手就是雙方分別發送FIN標志來關閉連接并讓對方確認。

?

傳輸層的協議還有UDP(TCP有連接,UDP沒有連接,UDP拿到地址后直接傳輸,速度快,不可靠。通常視頻傳輸、語音傳輸等對完整性要求不高的且對速度要求高、數據量大的通信多使用UDP;郵件,網頁一般使用TCP協議)

?

java中網絡通信是通過Socket實現的;分為ServerSocket(在服務端,通過accept()監聽請求,監聽到請求后返回Socket對象)和Socket(用于具體完成數據傳輸,在客戶端直接使用Socket發起請求并傳輸數據)

?

ServerSocket的使用分三步:

一.創建ServerSocket? ? 有5個構造方法,最方便的是ServerSocket(int port){? }? 只需一個端口號即可

二.ServerSocket.accept()進行監聽,該方法是阻塞方法(調用后程序會停下來等待連接請求,在接收到請求之前程序不會繼續走下去;當接收到請求后該方法會返回一個Socket對象)

三.使用accept()方法返回的Socket與客戶端進行通信。

簡單示例:

1 import java.io.*; 2 import java.net.ServerSocket; 3 import java.net.Socket; 4 5 public class Server{ 6 public static void main(String args[]){ 7 try{ 8 //創建一個ServerSocket監聽8080端口 9 Serversocket server=new ServerSocket(8080); 10 //等待請求 11 Socket socket=server.accept(); 12 //接收到請求后使用socket進行通信 13 BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); 14 String line=br.readLine(); 15 System.out.println("從客戶端接收信息:"+line); 16 //創建PrintWriter,用于發送數據 17 PrintWriter pw=new PrintWriter(socket.getOutputStream()); 18 pw.println("發送數據:"+line); 19 pw.flush(); 20 pw.close(); 21 br.close(); 22 socket.close(); 23 server.close(); 24 }catch(Exception e){ 25 e.printStackTrace(); 26 } 27 } 28 }

?

客戶端Socket

選擇Socket(String host,int port)構造方法傳入目標主機的地址和端口,其創建過程就會與服務端建立連接。

1 import java.io.*; 2 import java.net.Socket; 3 4 public class Client{ 5 public static void main(String args[]){ 6 String msg="客戶端要傳的數據......"; 7 try{ 8 //創建一個Socket,和本機的8080端口連接 9 Socket socket=new Socket("127.0.0.1",8080); 10 //使用Socket創建PrintWriter和Bufferedreader讀寫數據 11 PrintWriter pw=new PrintWriter(socket.getOutputStream()); 12 BufferedReader bf=new BufferedReader(new InputStreamReader(socket.getInputStream())); 13 //發送數據 14 pw.println(msg); 15 pw.flush(); 16 //接收數據 17 String line=br.readLine(); 18 System.out.println("從服務端接收數據:"+line); 19 //關閉資源 20 pw.close(); 21 br.close(); 22 socket.close(); 23 }catch(Exception e){ 24 e.printStackTrace(); 25 } 26 } 27 }

?

先啟動Server,在啟動Client就可完成一次通信。

?

轉載于:https://www.cnblogs.com/code2038/p/9737724.html

總結

以上是生活随笔為你收集整理的TCP/IP协议的一个具体实现Socket的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。