當前位置:首頁 » 編程軟體 » socket編程原理

socket編程原理

發布時間: 2023-05-02 04:15:21

1. Socket編程的幾種模式

其基本原理是:首先建立一個socket連接,然後對其進行操作,比如,從該socket讀數據。因為網路傳輸是要一定的時間的,即使網路通暢的情況下,接受數據的操作也要花費時間。對於一個簡單的單線程程序,接收數據的過程是無法處理其他操作的。比如一個窗口程序,當你接收數據時,點擊按鈕或關閉窗口操作都不會有效。它的缺點顯而易見,一個線程你只能處理一個 socket,用來教課還行,實際使用效果就不行了。select模型 為了處理多個socket連接,聰明的人們發明了select模型。該模型以集合來管理socket連接,每次去查詢集合中的socket狀態,從而達到處理多連接的能力,其函數原型是int select(int nfds, fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout)。比如我們判斷某個socket是否有數據可讀,我們首先將一個fdread集合置空,然後將socket加入到該集合,調用 select(0,&fdread,NULL,NULL,NULL),之後我們判斷socket是否還在fdread中,如果還在,則說明有數據可讀。數據的讀取和阻塞模型相同,調用recv函數。但是每個集合容量都有一個限值,默認情況下是64個,當然你可以重新定義它的大小,但還是有一個最上限,自己設置也不能超過該值,一般情況下是1024。盡管select模型可以處理多連接,但集合的管理多少讓人感到繁瑣。非同步選擇模型 熟悉windows操作系統的都知道,其窗口處理是基於消息的。人們又發明了一種新的網路模型——WSAAsyncSelect模型,即非同步選擇模型。該模型為每個socket綁定一個消息,當socket上出現事先設置的socket事件時,操作系統就會給應用程序發送這個消息,從而對該 socket事件進行處理,其函數原型是int WSAAsynSelect(SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent)。hWnd指明接收消息的句柄,wMsg指定消息ID,lEvent按位設置感興趣的網路事件,入 WSAAsyncSelect(s,hwnd,WM_SOCKET, FD_CONNECT | FD_READ | FD_CLOSE)。該模型的優點是在系統開銷不大的情況下同時處理許多連接,也不需要什麼集合管理。缺點很明顯,即使你的程序不需要窗口,也要專門為 WSAAsyncSelect模型定義一個窗口。另外,讓單個窗口去處理成千上萬的socket操作事件,很可能成為性能瓶頸。事件選擇模型 與WSAAsynSelect模型類似,人們還發明了WSAEventSelect模型,即事件選擇模型。看名字就可以猜測出來,它是基於事件的。WSAAsynSelect模型在出現感興趣的socket事件時,系統會發一個相應的消息。而WSAEventSelect模型在出現感興趣的socket事件時,系統會將相應WSAEVENT事件設為傳信。可能你現在對sokect事件和普通WSAEVENT事件還不是很清楚。 socket事件是與socket操作相關的一些事件,如FD_READ,FD_WRITE,FD_ACCEPT等。而WSAEVENT事件是傳統的事件,該事件有兩種狀態,傳信(signaled)和未傳信(non-signaled)。所謂傳信,就是事件發生了,未傳信就是還沒有發生。我們每次建立一個連接,都為其綁定一個事件,等到該連接變化時,事件就會變為傳信狀態。那麼,誰去接受這個事件變化呢?我們通過一個 WSAWaitForMultipleEvents(...)函數來等待事件發生,傳入參數中的事件數組中,只有有一個事件發生,該函數就會返回(也可以設置為所有事件發生才返回,在這里沒用),返回值為事件的數組序號,這樣我們就知道了哪個事件發生了,也就是該事件對應的socket有了socket操作事件。該模型比起WSAAsynSelect模型的優勢很明顯,不需要窗口。唯一缺點是,該模型每次只能等待64個事件,這一限制使得在處理多 socket時,有必要組織一個線程池,伸縮性不如後面要講的重疊模型。重疊I/O(Overlapped I/O)模型重疊I/O(Overlapped I/O)模型使應用程序達到更佳的系統性能。重疊模型的基本設計原理是讓應用程序使用重疊數據結構,一次投遞一個或多個Winsock I/O請求。重疊模型到底是什麼東西呢?可以與WSAEventSelect模型做類比(其實不恰當,後面再說),事件選擇模型為每個socket連接綁定了一個事件,而重疊模型為每個socket連接綁定了一個重疊。當連接上發生socket事件時,對應的重疊就會被更新。其實重疊的高明之處在於,它在更新重疊的同時,還把網路數據傳到了實現指定的緩存區中。我們知道,前面的網路模型都要用戶自己通過recv函數來接受數據,這樣就降低了效率。我們打個比方,WSAEventSelect模型就像郵局的包裹通知,用戶收到通知後要自己去郵局取包裹。而重疊模型就像送貨上門,郵遞員發給你通知時,也把包裹放到了你事先指定的倉庫中。 重疊模型又分為事件通知和完成常式兩種模式。在分析這兩種模式之前,我們還是來看看重疊數據結構: typedef struct WSAOVERLAPPED{DWORD Internal; DWORD InternalHigh; DWORD Offset; DWORD OffsetHigh; WSAEVENT hEvent; }WSAOVERLAPPED, FAR * LPWSAOVERLAPPED; 該數據結構中,Internal、InternalHigh、Offset、OffsetHigh都是系統使用的,用戶不用去管,唯一關注的就是 hEvent。如果使用事件通知模式,那麼hEvent就指向相應的事件句柄。如果是完成常式模式,hEvent設為NULL。我們現在來看事件通知模式,首先創建一個事件hEvent,並創建一個重疊結構AcceptOverlapped,並設置AcceptOverlapped.hEvent = hEvent,DataBuf是我們事先設置的數據緩存區。調用 WSARecv(AcceptSocket,&DataBuf,1,&RecvBytes,&Flags,&AcceptOverlapped,NULL),則將AcceptSocket與AcceptOverlapped重疊綁定在了一起。當接收到數據以後,hEvent就會設為傳信,而數據就會放到 DataBuf中。我們再通過WSAWaitForMultipleEvents(...)接收到該事件通知。這里我們要注意,既然是基於事件通知的,那它就有一個事件處理上限,一般為64。 完成常式和事件通知模式的區別在於,當相應的socket事件出現時,系統會調用用戶事先指定的回調函數,而不是設置事件。其實就是將WSARecv的最後一個參數設為函數指針。該回調函數的原型如下: void CALLBACK CompletionROUTINE( DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags);其中,cbTransferred表示傳輸的位元組數,lpOverlapped是發生socket事件的重疊指針。我們調用 WSARecv(AcceptSocket,&DataBuf,1,&RecvBytes,&Flags,&AcceptOverlapped,WorkerRoutine) 將AcceptSocket與WorkRoutine常式綁定。這里有一點小提示,當我們創建多個socket的連接時,最好把重疊與相應的數據緩存區用一個大的數據結構放到一塊,這樣,我們在常式中通過lpOverlapped指針就可以直接找到相應的數據緩存區。這里要注意,不能將多個重疊使用同一個數據緩存區,這樣在多個重疊都在處理時,就會出現數據混亂。完成埠模型 下面我們來介紹專門用於處理為數眾多socket連接的網路模型——完成埠。因為需要做出大量的工作以便將socket添加到一個完成埠,而其他方法的初始化步驟則省事多了,所以對新手來說,完成埠模型好像過於復雜了。然而,一旦弄明白是怎麼回事,就會發現步驟其實並非那麼復雜。所謂完成埠,實際是Windows採用的一種I/O構造機制,除套接字句柄之外,還可以接受其他東西。使用這種模式之前,首先要創建一個I/O完成埠對象,該函數定義如下: HANDLE CreateIoCompletionPort( HANDLE FileHandle, HANDLE ExistingCompletionPort, DWORD CompletionKey, DWORD NumberOfConcurrentThreads);該函數用於兩個截然不同的目的:1)用於創建一個完成埠對象。2)將一個句柄同完成埠關聯到一起。 通過參數NumberOfConcurrentThreads,我們可以指定同時運行的線程數。理想狀態下,我們希望每個處理器各自負責一個線程的運行,為完成埠提供服務,避免過於頻繁的線程任務切換。對於一個socket連接,我們通過 CreateIoCompletionPort((HANDLE)Accept,CompletionPort, (DWORD)PerHandleData,0)將Accept連接與CompletionPort完成埠綁定到一起,CompetionPort對應的那些線程不斷通過GetQueuedCompletionStatus來查詢與其關聯的socket連接是否有I/O操作完成,如果有,則做相應的數據處理,然後通過WSARecv將該socket連接再次投遞,繼續工作。完成埠在性能和伸縮性方面表現都很好,相關聯的socket連接數目沒有限制。

2. 求PHP SOCKET編程原理

你了解什麼是socket不?
如果御稿差不了解建議去了解下,都是需要掌握的知識

我大概跟你描述下流程

伺服器端先初始化Socket,綁定埠(bind),對埠進行監聽(listen),調用accept阻塞,等待客戶端連接。
客戶端初始化一個敬差Socket,然後連接伺服器(connect),如果連接成功,這時客戶端與伺服器端的連接就建立了。客戶端發送數據請求,伺服器端接收請求並處理請求,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,一次交互結束。

其實網上資源很多了, 多了解多動鎮皮手多你自己的進步有很大的幫助

3. 什麼是socket網路編程

使用socket套接字,利用TCP/IP或者UDP協議,實現幾個機器坦兆團之間的通信。一般使用C/S結構。
以TCP/IP為例:首先建立一個伺服器,步驟如下:socket()創建一個socket,bind()綁定socket到一個埠,listen()監聽埠,accept()等待客戶端的連讓橘接。客戶端程序:socket()創建一個socket,可以綁定也可以不綁定,然猜清後connect()連接到伺服器端。socket又分為阻塞式的和非阻塞式的。阻塞式的就是伺服器端等待連接直到連接上,不然一直掛起。

4. Socket通信原理

Socket 通信原理
Socket 博客地址
Socket 是一組調用介面、是 { 應用層與 TCP/IP 協議族 } 通信的中間軟體抽象層 . 調用介面是 TCP/IP 協議族的 API 函數

TCP/IP協議族包括傳輸層、網路層、鏈路層 TCP、UDP、IP、ICMP、IGMP、ARP、RARP

Socket介面將復雜的首嘩TCP/IP協議巧芹扮族隱藏,給用戶提供一組簡單的介面就是全部,讓Socket去組織數據以符合指定的協議。

socket的基孝灶本操作
socket()函數、bind()函數、listen()函數、
connect()函數、accept()函數、
read()函數、write()函數、close()函數等

Unix/Linux基本哲學之一就是一切皆文件
都可以用 open –> write/read –> close 模式來操作

伺服器端: socket() —> bind() —> listen() —> accept() —> read() || write() —> close()
—客戶端: socket() —> connect() —> wirte() || read() —> close()

伺服器:創建並初始化socket實例、綁定埠號、監聽埠號、阻塞等待客戶端連接
客戶端:創建並初始化socket實例、連接伺服器、連接成功即TCP雙向通信通道建立

客戶端發送請求數據、伺服器接受請求數據、
伺服器處理請求數據、
伺服器發送響應數據、客戶端接受響應數據、
客戶端與伺服器關閉連接,此雙向交互結束。

5. Android 網路編程之Socket理解

TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網路間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是 TCP 和 IP 兩個協議,而是指一個由 FTP 、 SMTP 、TCP、 UDP 、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。

互聯網進行通信時,需要相應的網路協議,TCP/IP 原本就是為使用互聯網而開發制定的協議族。因此,互聯網的協議就是 TCP/IP,TCP/IP 就是互聯網的協議。所以不要簡單認為TCP/IP協議就是我們的網路請求http拿點東西,它是一個統稱。

socket 的誕生是為了應用程序能夠更方便的將數據經由傳輸層來傳輸,所以它本質上就是對 TCP/IP 的運用進行了一層封裝,然後應用程序直接調用 socket API 即可進行通信。那麼它是如何工作的呢褲茄行?它分為 2 個部分,服務端需要建立 socket 來監聽指定的地址,然後等待客戶端來連接。而客戶端則需要建立 socket 並與服務端的 socket 地胡嘩址進行連接。

有圖可以看出Socket是應用層跟納兄傳輸層的橋梁,應用層通過socket api提供的方法來讓數據流轉到傳輸層。

6. java Socket通信原理

具體如下:

首先socket 通信是基於TCP/IP 網路層上的一種傳送方式,我們通常把TCP和UDP稱為傳輸層。其中UDP是一種面向無連接的傳輸層協議。UDP不關心對端是否真正收到了傳送過去的數據。

如果需要檢查對端是否收到分組數據包,或者對端是否連接到網路,則需要在應用程序中實現。UDP常用在分組數據較少或多播、廣播通信以及視頻通信等多媒體領域。

在這里我們不進行詳細討論,這里主要講解的是基於TCP/IP協議下的socket通信。

socket是基於應用服務與TCP/IP通信之間的一個抽象,他將TCP/IP協議裡面復雜的通信邏輯進行分裝。

服務端初始化ServerSocket,然後對指定的埠進行綁定,接著對埠及進行監聽,通過調用accept方法阻塞。

此時,如果客戶端有一個socket連接到服務端,那麼服務端通過監聽和accept方法可以與客戶端進行連接。

Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。

Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。

Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。

7. java socket編程原理是

socket編程就是局侍漏解決程序與程序,進程與進程等信息交換的一直方式
可以想像成2個人交流,2個人交流 ,是什麼原理啊,當然首先要有2個對象啦,其中,這2個對象可以都是地球人 ,也可以一個是地球人,一個是外星談大人,客戶端和伺服器就是這2個對象,地球桐爛就是你的電腦,火星也是一個電腦

8. socket編程到底是什麼

socket 其實就是操作系統提供給程序員操作「網路協議棧」的介面,說人話就是,你能通過socket 的介面,來控制協議找工作,從而實現網路通信,達到跨主機通信。

協議棧的上半部分有兩塊,分別是負責收發數據的 TCP 和 UDP 協議,它們兩會接受應用層的委託執行收發數據的操作。

協議棧的下面一半是用 IP 協議控制網路包收發操作,在互聯網上傳數據時,數據會被切分成一塊塊的網路包,而將網路包發送給對方的操作就是由 IP 負責的。這里需要注意的是,服務端調用 accept 時,連接成功了會返回一個已完成連接的 socket,後續用來傳輸數據。

所以,監聽的 socket 和真正用來傳送數據的 socket,是「兩個」 socket,一個叫作監聽 socket,一個叫作已完成連接 socket。成功連接建立之後,雙方開始通過 read 和 write 函數來讀寫數據,就像往一個文件流裡面寫東西一樣。

9. iOS開發網路篇—Socket編程

一、網路各個協議:TCP/IP、SOCKET、HTTP等

網路七層由下往上分別為物理層、數據鏈路層、網路層、傳輸層、會話層、表示層和應用層。

其中物理層、數據鏈路層和網路層通常被稱作媒體層,是網路工程師所研究的對象;

傳輸層、會話層、表示層和應用層則被稱作主機層,是用戶所面向和關心的內容。

http協議對應於應用層

tcp協議對應於傳輸層

ip協議對應於網路層

三者本質上沒有可比性。 何況HTTP協議是基於TCP連接的。

TCP/IP是傳輸層協議,主要解決數據如何在網路中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。

我 們在傳輸數據時,可以只使用傳輸層(TCP/IP),但是那樣的話,由於沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用應用層 協議,應用層協議很多,有HTTP、FTP、TELNET等等,也可以自己定義應用層協議。WEB使用HTTP作傳輸層協議,以封裝HTTP文本信息,然 後使用TCP/IP做傳輸層協議將它發送到網路上。Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用介面(API),通過Socket,我們才能使用TCP/IP協議。

二、Http和Socket連接區別

相信不少初學手機聯網開發的朋友都想知道Http與Socket連接究竟有什麼區別,希望通過自己的淺顯理解能對初學者有所幫助。

2.1、TCP連接

要想明白Socket連接,先要明白TCP連接。手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網路建立TCP連接。TCP協議可以對上層網路提供介面,使上層網路數據的傳輸建立在「無差別」的網路之上。

建立起一個TCP連接需要經過「三次握手」:

第一次握手:客戶端發送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;

第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;

第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。



手過程中傳送的包里不包含數據,三次握手完畢後,客戶端與伺服器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連

接之前,TCP

連接都將被一直保持下去。斷開連接時伺服器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過「四次握手」(過程就不細寫了,就是伺服器和客

戶端交互,最終確定斷開)

2.2、HTTP連接

HTTP協議即超文本傳送協議(HypertextTransfer Protocol ),是Web聯網的基礎,也是手機聯網常用的協議之一,HTTP協議是建立在TCP協議之上的一種應用。

HTTP連接最顯著的特點是客戶端發送的每次請求都需要伺服器回送響應,在請求結束後,會主動釋放連接。從建立連接到關閉連接的過程稱為「一次連接」。

1)在HTTP 1.0中,客戶端的每次請求都要求建立一次單獨的連接,在處理完本次請求後,就自動釋放連接。

2)在HTTP 1.1中則可以在一次連接中處理多個請求,並且多個請求可以重疊進行,不需要等待一個請求結束後再發送下一個請求。



於HTTP在每次請求結束後都會主動釋放連接,因此HTTP連接是一種「短連接」,要保持客戶端程序的在線狀態,需要不斷地向伺服器發起連接請求。通常的

做法是即時不需要獲得任何數據,客戶端也保持每隔一段固定的時間向伺服器發送一次「保持連接」的請求,伺服器在收到該請求後對客戶端進行回復,表明知道客

戶端「在線」。若伺服器長時間無法收到客戶端的請求,則認為客戶端「下線」,若客戶端長時間無法收到伺服器的回復,則認為網路已經斷開。

三、SOCKET原理

3.1、套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP協議的網路通信的基本操作單元。它是網路通信過程中端點的抽象表示,包含進行網路通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠。



用層通過傳輸層進行數據通信時,TCP會遇到同時為多個應用程序進程提供並發服務的問題。多個TCP連接或多個應用程序進程可能需要通過同一個

TCP協議埠傳輸數據。為了區別不同的應用程序進程和連接,許多計算機操作系統為應用程序與TCP/IP協議交互提供了套接字(Socket)介面。應

用層可以和傳輸層通過Socket介面,區分來自不同應用程序進程或網路連接的通信,實現數據傳輸的並發服務。

3.2 、建立socket連接

建立Socket連接至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket。

套接字之間的連接過程分為三個步驟:伺服器監聽,客戶端請求,連接確認。

伺服器監聽:伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網路狀態,等待客戶端的連接請求。

客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連接的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連接請求。



接確認:當伺服器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把伺服器端套接字的描述發給客戶

端,一旦客戶端確認了此描述,雙方就正式建立連接。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。

3.3、SOCKET連接與TCP連接

創建Socket連接時,可以指定使用的傳輸層協議,Socket可以支持不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連接時,該Socket連接就是一個TCP連接。

3.4、Socket連接與HTTP連接



於通常情況下Socket連接就是TCP連接,因此Socket連接一旦建立,通信雙方即可開始相互發送數據內容,直到雙方連接斷開。但在實際網路應用

中,客戶端到伺服器之間的通信往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆默認會關閉長時間處於非活躍狀態的連接而導致

Socket 連接斷連,因此需要通過輪詢告訴網路,該連接處於活躍狀態。

而HTTP連接使用的是「請求—響應」的方式,不僅在請求時需要先建立連接,而且需要客戶端向伺服器發出請求後,伺服器端才能回復數據。



多情況下,需要伺服器端主動向客戶端推送數據,保持客戶端與伺服器數據的實時與同步。此時若雙方建立的是Socket連接,伺服器就可以直接將數據傳送給

客戶端;若雙方建立的是HTTP連接,則伺服器需要等到客戶端發送一次請求後才能將數據傳回給客戶端,因此,客戶端定時向伺服器端發送連接請求,不僅可以

保持在線,同時也是在「詢問」伺服器是否有新的數據,如果有就將數據傳給客戶端。

這里我們使用Socket實現一個聊天室的功能,關於伺服器這里的就不介紹了

@interfaceViewController (){

NSInputStream *_inputStream;//對應輸入流

NSOutputStream *_outputStream;//對應輸出流

}

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *inputViewConstraint;

@property (weak, nonatomic) IBOutlet UITableView *tableView;

@property (nonatomic, strong) NSMutableArray *chatMsgs;//聊天消息數組

@end
懶載入這個消息數組

//從主運行循環移除

//1.建立連接

//定義C語言輸入輸出流

//把C語言的輸入輸出流轉化成OC對象

//設置代理

//把輸入輸入流添加到主運行循環

//不添加主運行循環 代理有可能不工作

//打開輸入輸出流

//登錄

//發送用戶名和密碼

//在這里做的時候,只發用戶名,密碼就不用發送

//如果要登錄,發送的數據格式為 "iam:zhangsan";

//如果要發送聊天消息,數據格式為 "msg:did you have dinner";

//登錄的指令11NSString *loginStr =@"iam:zhangsan";

//把Str轉成NSData

//建立一個緩沖區 可以放1024個位元組

//返回實際裝的位元組數

//把位元組數組轉化成字元串

//從伺服器接收到的數據

//聊天信息

//刷新表格

//發送數據

//發送完數據,清空textField

//數據多,應該往上滾動

}

//監聽鍵盤

//獲取窗口的高度

//鍵盤結束的Frm

//獲取鍵盤結束的y值

熱點內容
oracle測試sql 發布:2025-07-08 03:16:54 瀏覽:972
php壁紙源碼 發布:2025-07-08 03:04:26 瀏覽:319
android應用層 發布:2025-07-08 02:42:32 瀏覽:301
大唐存儲銷量 發布:2025-07-08 02:41:11 瀏覽:582
腳本怎麼打開 發布:2025-07-08 02:41:06 瀏覽:822
貴州電信iPtv升級伺服器地址 發布:2025-07-08 02:38:48 瀏覽:412
電腦怎麼鏈接本地伺服器 發布:2025-07-08 02:34:22 瀏覽:147
android調試webview 發布:2025-07-08 02:26:28 瀏覽:358
壓縮袋鞋子 發布:2025-07-08 02:21:30 瀏覽:752
為什麼安卓打吃雞感覺有延遲 發布:2025-07-08 02:09:32 瀏覽:168