A. socket是什麼
Socket是英文「插座」的意思,它在計算機領域中指的是一種網路編程介面。
socket 網路編程
Socket通信可以使用不同的凱猜仿協議,如TCP、UDP等。其中,TCP協議是一種可靠的協議,保證數據傳輸的完整性和可盯纖靠性,通常用於重要數據的傳輸。而UDP協議則是一種不可靠的協議,傳輸速度更快,但可能會存在數據兆唯丟失或冗餘。
Socket技術被廣泛應用於各種網路應用程序的開發和實現,如Web伺服器、聊天軟體、網路游戲等。
B. 什麼是Socket
網路上的兩個程序通過一個雙向的通信連接實現激搜數據的交換,這個連接的一端稱為一個socket。
C. socket通信原理
socket通信原理是一種「打開—讀/寫—關閉」模式的實現,伺服器和客戶端各自維護一個「文件」,在建立連接打開後,可以向文件寫入內容供對方讀取或者讀鏈遲散取對方內容,通訊結束時關閉文件。
Socket在應用層和傳輸層之間的一個抽象層,它把 TCP/IP 層復雜的操作抽象為幾個簡單的介面,供應用層調用實現進程在網路中的通信。Socket 起源於 UNIX,在 UNIX 一切皆文件的思想下,進程間通信就被冠名為文件描述符(file descriptor)。
Socket 保證了不同計算機之間的通信,也就是網路通信。對於網站,通信模型是伺服器與客戶端之間的通信。兩端都建立了一個 Socket 對象,然後通過 Socket 對象對數據進行傳輸。通常伺服器處於一個無限循環,等待客戶端的連接。
(3)網路通信socket擴展閱讀
SOCK_STREAM類型的套介面為全雙向的位元組流。對於流類套介面,在接收或發送數據前必需處於已連接狀態。用connect()調用建立與另一套旦襪介面的連接,連接成功後,即可用send()和recv()()傳送數據。當會話結束後,調用closesocket()。帶外數據根據規定用send()和recv()來接收。
實現SOCK_STREAM類型套介面的通訊協議保證數據不會丟失也不會重復。如果棚氏終端協議有緩沖區空間,且數據不能在一定時間成功發送,則認為連接中斷,其後續的調用也將以WSAETIMEOUT錯誤返回。
SOCK_DGRAM類型套介面允許使用sendto()和recvfrom()從任意埠發送或接收數據報。如果這樣一個套介面用connect()與一個指定埠連接,則可用send()和recv()與該埠進行數據報的發送與接收。
D. socket介面是什麼意思
是指同一計算機不同功能層之間的通信規則稱為介面。
java介面作用:
1、利於代碼的規范。這樣做的目的一方面是為了給開發人員一個清晰的指示,告訴他們哪些業務需要實現;同時也能防止由於開發人員隨搜伏意命名而導致的命名不清晰和代碼混亂,影響開發效率。
2、有利於對代碼進行維護。可以一開始定義一個介面,把功能菜單放在介面里,然後定義類時實現這個介面,以後要換的話只不過是引用另一個類而已,這樣就達到維護、拓展的方便性。
3、保證代碼的安全和嚴密。一個好的程序一定符合高內聚低耦合的特徵,能夠讓系統世坦攜的功能較好地實現,而信手不涉及任何具體的實現細節。這樣就比較安全、嚴密一些,這一思想一般在軟體開發中較為常見。
E. Socket詳解
1、 Socket(套接字)概念
網路上兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一段稱為一個 socket ,socket是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進襪橡程的協議埠,遠地主機的IP地址,遠地進程的協議埠。
Socket是對TCP/IP協議的封裝,它把復雜的TCP/IP協議族隱藏在Socket介面後面,提供一個易用的介面,所以Socket本身並不是協議,而是一個調用介面(API)。
在一定程度可以認為Socket位於應用層和傳輸層之間。創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。
2、 建立Socket連接
建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket。
套接字之間的連接過程分為 三個步驟 :
(1)伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。
(2)客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。
(3)連接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶 端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
3、 Socket連接與HTTP連接
由於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網路應用 中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致 Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處於活躍狀態。
而HTTP連接使用的是「請求—響應」的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。
4、 關於Socket長連接的心跳包
心跳包就是為了避免一個連接長時間不活躍被關閉而定時發送的一個」騷擾」數據包。
Socket本身就是長連接的,那麼為什麼還要心跳包呢?
理論上說,這個連接是一直保持連接的,但是實際情況中,如果中間節點出現什麼故障是難以知道的。更要命的是,有的節點(防火牆)會自動把一定時間之內沒有數據交互的連接給斷掉。在這個時候,就需要我們的心跳包了,用於維持粗好老長連接,保活。在獲知了斷線之後,伺服器邏輯可能需要做一些事情,比如斷線後的數據清理,重新連接……當然,這個自然是要由邏輯層根據需求去做了。總的來說,心跳包主要也就是用於長連接的保活和斷線處理。一般的應用下,判定時間在30-40秒比較不錯。如果實在要求高,那就在6-9秒。
如果不主動關閉socket的話,系統不會自動關閉的,除非當前進程掛掉了,操作系統把佔用的socket回收了才會關閉。為什麼需要心跳連接?主要是為了判斷當前連接是否是有效的、可被使用的。在實際應用中假設一段時間沒有數據傳輸時候理論上說應該連接是沒有問題的,但是網路復雜,中途出現問題也是常見的,網線被掐斷了、對方進程掛掉了、頻繁丟包等,這時候TCP連接是不可使用的,但是對於應用層並不知道,如果需知道網路情況則要很復雜的超時進行了解,TCP從底層就實現了這樣的功能。心跳機制是TCP在一段時間間隔後發送確認連接端是否還存在,如果存在的話就會回傳一個包確定網路有效,如果岩升心跳包有問題,則通知上層應用當前網路有問題了。
這取決於你的server端的超時配置, 每個socket連接都是長連接,它是一個相當佔用系統資源的通信管道, 如果這個長連接什麼事也沒干硬是要佔著資源,則server端可以選擇關閉這個連接,以省下資源讓更多的用戶連接進來。
所以,即便客戶端的是採用死循環while(true)方式連到服務端,對於特定的客戶端和服務端類型來說也需要一定時間間隔的心跳(告訴服務端,我還活著,雖然我沒幹活也沒說話,但別把我關了)
F. socket編程到底是什麼
socket 其實就是操作系統提供給程序員操作「網路協議棧」的介面,說人話就是,你能通過socket 的介面,來控制協議找工作,從而實現網路通信,達到跨主機通信。
協議棧的上半部分有兩塊,分別是負責收發數據的 TCP 和 UDP 協議,它們兩會接受應用層的委託執行收發數據的操作。
協議棧的下面一半是用 IP 協議控制網路包收發操作,在互聯網上傳數據時,數據會被切分成一塊塊的網路包,而將網路包發送給對方的操作就是由 IP 負責的。這里需要注意的是,服務端調用 accept 時,連接成功了會返回一個已完成連接的 socket,後續用來傳輸數據。
所以,監聽的 socket 和真正用來傳送數據的 socket,是「兩個」 socket,一個叫作監聽 socket,一個叫作已完成連接 socket。成功連接建立之後,雙方開始通過 read 和 write 函數來讀寫數據,就像往一個文件流裡面寫東西一樣。
G. socket是什麼意思
socket是插座,插槽的意思,電腦CPU座上一般可以看到
H. socket是什麼呀
套接字(Socket),就是對網路中不同主機上的應用進程之間進行雙向通信的端點的抽象。
一個套接字就是網路上進程通信的一端,提供了應用層進程利用網路協議交換數據的機制。從所處的地位來講,套接字上聯應用進程,下聯網路協議棧,是應用程序通過網路協議進行通信的介面,是應用程序與網路協議根進行交互的介面。
套接字是通信的基石,是支持TCP/IP協議的路通信的基本操作單元。
可以將套接字看作不同主機間的進程進行雙間通信的端點,它構成了單個主機內及整個網路間的編程界面。套接字存在於通信域中,通信域是為了處理一般的線程通過套接字通信而引進的一種抽象概念。
套接字通常和同一個域中的套接字交換數據(數據交換也可能穿越域的界限,但這時一定要執行某種解釋程序),各種進程使用這個相同的域互相之間用Internet協議簇來進行通信。
Socket(套接字)可以看成是兩個網路應用程序進行通信時,各自通信連接中的端點,這是一個邏輯上的概念。它是網路環境中進程間通信的API(應用程序編程介面),也是可以被命名和定址的通信端點,使用中的每一個套接字都有其類型和一個與之相連進程。
通信時其中一個網路應用程序將要傳輸的一段信息寫入它所在主機的 Socket中,該 Socket通過與網路介面卡(NIC)相連的傳輸介質將這段信息送到另外一台主機的 Socket中,使對方能夠接收到這段信息。
Socket是由IP地址和埠結合的,提供向應用層進程傳送數據包的機制。
類型
1、數據報套接字
無連接套接字,使用用戶數據報協議(UDP)。在數據報套接字上發送或接收的每個數據包都單獨定址和路由。數據報套接字不能保證順序和可靠性,因此從一台機器或進程發送到另一台機器或進程的多個數據包可能以任何順序到達或可能根本不到達。在數據報套接字上發送廣播可能需要特殊配置。
為了接收廣播數據包,數據報套接字不應該綁定到特定地址,盡管在某些實現中,當數據報套接字綁定到特定地址時也可能接收廣播數據包。
2、流套接字
面向連接的套接字,使用傳輸控制協議(TCP)、流控制傳輸協議(SCTP) 或數據報擁塞控制協議(DCCP)。流套接字提供了無記錄邊界的有序且獨特的無錯誤數據流,並具有用於創建和銷毀連接以及報告錯誤的明確定義的機制。
流套接字以帶外功能可靠地、有序地傳輸數據。在 Internet 上,流套接字通常使用 TCP 實現,以便應用程序可以使用 TCP/IP 協議在任何網路上運行。
3、原始套接字
允許直接發送和接收 IP 數據包,無需任何特定於協議的傳輸層格式。對於其他類型的套接字,根據選擇的傳輸層協議(例如 TCP、UDP)自動封裝有效載荷,並且套接字用戶不知道與有效載荷一起廣播的協議頭的存在。從原始套接字讀取時,通常包含標頭。
從原始套接字傳輸數據包時,自動添加標頭是可選的。
大多數套接字應用程序編程介面(API),例如基於Berkeley 套接字的那些,支持原始套接字。Windows XP於 2001 年發布,在Winsock介面中實現了原始套接字支持,但三年後,微軟出於安全考慮限制了 Winsock 的原始套接字支持。
原始套接字用於與安全相關的應用程序,如Nmap。原始套接字的一個用例是在用戶空間中實現新的傳輸層協議。
原始套接字通常在網路設備中可用,用於路由協議,例如Internet 組管理協議(IGMP) 和開放最短路徑優先(OSPF),以及用於Internet 控制消息協議(ICMP) 等事情,由ping 實用程序。
以上內容參考網路-套接字
I. java Socket通信原理
通過tcp/IP或者udp進行網路通訊。
如果還要繼續深究的話,建議你看看網路協議方面的書籍
J. socket是什麼
socket是用於在兩個基於TCP/IP協議的應用程序之間相互通信。最早出現在UNIX系統中,是UNIX系統主要的信息傳遞方式。在WINDOWS系統中,SOCKET稱為WINSOCK。
socket(凳卜也叫套接字)最初是在Unix系統上開發的網路通信的介面。
後來微軟等公司將它移植到了windows下,當然原來unix系統下的還是好用的。
對於socket可以這樣理解:
它就是一個函數庫,裡麵包括大量的函數和相應的數據結構,已經實現好了。
它支持網路通信。
程序開發人員可以通過閱讀相關的函數文檔,了解函數的使用方法,進行網路的編程。
兩種形式的socket:流式套接鋒氏字,對應與TCP協議。
簡單來講,Socket是網路應用程序介面,是應用層到傳送層的介面。也就是用戶進程,與系統內核的介面,即API。
我想你肯定知道QQ這個程序 是有網路模塊的,那麼這個棗基穗模快是調用socket API 來實現的。
另外,QQ程序 還用到了多線程編程,同樣也是調用一些API實現的,比如系統的API、ACE的API等。