Java Socket编程总结
生活随笔
收集整理的這篇文章主要介紹了
Java Socket编程总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、網(wǎng)絡(luò)API
InetAddress ? 用于標(biāo)識網(wǎng)絡(luò)上的硬件資源,主要是IP地址
URL ? ?統(tǒng)一資源定位符,通過URL可以直接讀取或?qū)懭刖W(wǎng)絡(luò)上的數(shù)據(jù) Sockets 使用TCP協(xié)議實現(xiàn)的網(wǎng)絡(luò)通信Socket相關(guān)的類 Datagram 使用UDP協(xié)議,將數(shù)據(jù)保存在用戶數(shù)據(jù)報中,通過網(wǎng)絡(luò)進行通信。?
二、地址
A、InetAddress ? ? ? ? ? ip地址
(1)靜態(tài)方法
- getLocalHost() ??InetAddress?
- getByName(String host) ? ? ??InetAddress
- getAllByName(String host) ??InetAddress[]
- getByAddress(byte[] addr) ??InetAddress
- getByAddress(String host, byte[] addr) ? ?InetAddress?
(2)成員方法
- getAddress() ? ?byte[]?
- getCanonicalHostName() ?String
- getHostAddress() ??String
- getHostName() ?String?
- isAnyLocalAddress() ?boolean
- isMulticastAddress() ??boolean?
- isReachable(int timeout) ??boolean?
?
B、InetSocketAddress ? ? ? ? socket地址
(1)構(gòu)造方法
- InetSocketAddress(InetAddress addr, int port) ? ??根據(jù) IP 地址和端口號創(chuàng)建套接字地址。
- InetSocketAddress(int port) ? ? ? 創(chuàng)建套接字地址,其中 IP 地址為通配符地址,端口號為指定值。
- InetSocketAddress(String hostname, int port) ? ? ?根據(jù)主機名和端口號創(chuàng)建套接字地址。
(2)成員方法
- getAddress() ?InetAddress ? ? ??獲取 InetAddress。
- getHostName() ??String ? ? ? ? ? ?獲取 hostname。
- getPort() ?int ? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取端口號。
(4)靜態(tài)方法
- createUnresolved(String host, int port) ? InetSocketAddress? ? ? ?根據(jù)主機名和端口號創(chuàng)建未解析的套接字地址。
?
三、Socket
(1)構(gòu)造方法
- Socket() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?通過系統(tǒng)默認(rèn)類型的 SocketImpl 創(chuàng)建未連接套接字
- Socket(InetAddress address, int port) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號。
- Socket(InetAddress address, int port, InetAddress localAddr, int localPort) ? ? ? ?創(chuàng)建一個套接字并將其連接到指定遠程地址上的指定遠程端口。
- Socket(Proxy proxy) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)建一個未連接的套接字并指定代理類型(如果有),該代理不管其他設(shè)置如何都應(yīng)被使用。
- Socket(String host, int port) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。
- Socket(String host, int port, InetAddress localAddr, int localPort) ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)建一個套接字并將其連接到指定遠程主機上的指定遠程端口。
(2)成員方法
1)關(guān)聯(lián)地址
- bind(SocketAddress bindpoint) ?void? ? ? ? ? ?將套接字綁定到本地地址。
- connect(SocketAddress endpoint) ? void?? ? ? ?將此套接字連接到服務(wù)器。
- connect(SocketAddress endpoint, int timeout) ? ?void? ? ? ? ?將此套接字連接到服務(wù)器,并指定一個超時值。
- isBound() ?boolean ? ? ? ? ? 返回套接字的綁定狀態(tài)。?
- isConnected() ?boolean ? ?返回套接字的連接狀態(tài)。
2)獲取IP地址
- getInetAddress() ? InetAddress?? ?? ?返回套接字連接的地址。?
- getLocalAddress() ? InetAddress?? ? 獲取套接字綁定的本地地址。
- getPort() ? ? ? ? ? ?int????返回此套接字連接到的遠程端口。
- getLocalPort() ? ? ?int?返回此套接字綁定到的本地端口。
- getLocalSocketAddress() ?SocketAddress?返回此套接字綁定的端點的地址,如果尚未綁定則返回 null。?
- getRemoteSocketAddress() ? SocketAddress?返回此套接字連接的端點的地址,如果未連接則返回 null。
3)獲取數(shù)據(jù)
- getInputStream() ? InputStream?? ? ? ? ? 返回此套接字的輸入流。?
- getOutputStream() ??OutputStream ? ??返回此套接字的輸出流。
- getChannel() ? SocketChannel ? ? ? ? ? ?返回與此數(shù)據(jù)報套接字關(guān)聯(lián)的唯一 SocketChannel 對象(如果有)。
4)設(shè)置緩沖區(qū)
- setReceiveBufferSize(int size)?void ? ? ? ? ? ?將此 Socket 的 SO_RCVBUF 選項設(shè)置為指定的值。?
- setSendBufferSize(int size)?void ? ? ? ??將此 Socket 的 SO_SNDBUF 選項設(shè)置為指定的值。
5)重用端口
- setReuseAddress(boolean on)?void?? ? ?啟用/禁用 SO_REUSEADDR 套接字選項。?
- getReuseAddress() ??boolean?? ? ? ? ? ? ??測試是否啟用 SO_REUSEADDR。
6)關(guān)閉
- close() ?void ? ? ? ? ? ? ? ? ? ?關(guān)閉此套接字。
- isClosed() ?boolean? ? ? ?返回套接字的關(guān)閉狀態(tài)。
?
四、ServerSocket
(1)構(gòu)造方法
- ServerSocket() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??創(chuàng)建非綁定服務(wù)器套接字。
- ServerSocket(int port) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)建綁定到特定端口的服務(wù)器套接字。
- ServerSocket(int port, int backlog) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 利用指定的 backlog 創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號。
- ServerSocket(int port, int backlog, InetAddress bindAddr) ? ??使用指定的端口、偵聽 backlog (最大的等待隊列)和要綁定到的本地 IP 地址創(chuàng)建服務(wù)器。
(2)綁定地址
- bind(SocketAddress endpoint) ? void?? ? ?將 ServerSocket 綁定到特定地址(IP 地址和端口號)。
- bind(SocketAddress endpoint, int backlog) ?void ? 將 ServerSocket 綁定到特定地址(IP 地址和端口號)。
- isBound() ?boolean ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回套接字的綁定狀態(tài)。?
?(3)獲取地址
- getInetAddress() ? InetAddress ? ? ?? ?返回此服務(wù)器套接字的本地地址。
- getLocalPort() ??int ? ?? ?返回此套接字在其上偵聽的端口。
- getLocalSocketAddress() ?SocketAddress ? ??返回此套接字綁定的端點的地址,如果尚未綁定則返回 null。
(4)設(shè)置緩沖區(qū)
- setReceiveBufferSize(int size)?void ? ? ? ? ? ?將此 Socket 的 SO_RCVBUF 選項設(shè)置為指定的值。?
- setSendBufferSize(int size)?void ? ? ? ??將此 Socket 的 SO_SNDBUF 選項設(shè)置為指定的值。
(5)重用端口
- setReuseAddress(boolean on)?void?? ? ?啟用/禁用 SO_REUSEADDR 套接字選項。?
- getReuseAddress() ??boolean?? ? ? ? ? ? ??測試是否啟用 SO_REUSEADDR。
(6)接受連接
- accept() ? Socket?? ??偵聽并接受到此套接字的連接。
(7)關(guān)閉
- close() ?void ? ? ? ? ? ? ? ? ? ?關(guān)閉此套接字。
- isClosed() ?boolean? ? ? ?返回套接字的關(guān)閉狀態(tài)。
?
五、DatagramSocket
(1)構(gòu)造方法
- DatagramSocket() ? ??構(gòu)造數(shù)據(jù)報套接字并將其綁定到本地主機上任何可用的端口。
- DatagramSocket(int port) 創(chuàng)建數(shù)據(jù)報套接字并將其綁定到本地主機上的指定端口。
- DatagramSocket(int port, InetAddress laddr) 創(chuàng)建數(shù)據(jù)報套接字,將其綁定到指定的本地地址。
- DatagramSocket(SocketAddress bindaddr) 創(chuàng)建數(shù)據(jù)報套接字,將其綁定到指定的本地套接字地址。
(2)綁定地址
- bind(SocketAddress addr) void? ? ? ?將此 DatagramSocket 綁定到特定的地址和端口。
- connect(InetAddress address, int port) void? 將套接字連接到此套接字的遠程地址。
- connect(SocketAddress addr) void? 將此套接字連接到遠程套接字地址(IP 地址 + 端口號)。
- disconnect() void? 斷開套接字的連接。
- isBound() ?boolean ? ? ? ? ? 返回套接字的綁定狀態(tài)。?
- isConnected() ?boolean ? ?返回套接字的連接狀態(tài)。
(3)獲取IP地址
- getInetAddress() ? InetAddress?? ?? ?返回套接字連接的地址。?
- getLocalAddress() ? InetAddress?? ? 獲取套接字綁定的本地地址。
- getPort() ? ? ? ? ? ?int???? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回此套接字連接到的遠程端口。
- getLocalPort() ? ? ?int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回此套接字綁定到的本地端口。
- getLocalSocketAddress() ?SocketAddress ? ? ? ? ?返回此套接字綁定的端點的地址,如果尚未綁定則返回 null。?
- getRemoteSocketAddress() ? SocketAddress ? ? 返回此套接字連接的端點的地址,如果未連接則返回 null。
(4)設(shè)置緩沖區(qū)
- setReceiveBufferSize(int size)?void ? ? ? ? ? ?將此 Socket 的 SO_RCVBUF 選項設(shè)置為指定的值。?
- setSendBufferSize(int size)?void ? ? ? ??將此 Socket 的 SO_SNDBUF 選項設(shè)置為指定的值。
(5)重用端口
- setReuseAddress(boolean on)?void?? ? ?啟用/禁用 SO_REUSEADDR 套接字選項。?
- getReuseAddress() ??boolean?? ? ? ? ? ? ??測試是否啟用 SO_REUSEADDR。
(6)發(fā)送接收數(shù)據(jù)
- receive(DatagramPacket p) ? void ? ? ??從此套接字接收數(shù)據(jù)報包。
- send(DatagramPacket p) ? ?void? 從此套接字發(fā)送數(shù)據(jù)報包。?
- getChannel() ?DatagramChannel ? ? ??返回與此數(shù)據(jù)報套接字關(guān)聯(lián)的唯一 DatagramChannel 對象(如果有)。
(7)關(guān)閉
- close() ?void ? ? ? ? ? ? ? ? ? ?關(guān)閉此套接字。
- isClosed() ?boolean? ? ? ?返回套接字的關(guān)閉狀態(tài)。
?
六、DatagramPacket
(1)構(gòu)造方法
- DatagramPacket(byte[] buf, int length) ? ? 構(gòu)造 DatagramPacket,用來接收長度為 length 的數(shù)據(jù)包。
- DatagramPacket(byte[] buf, int length, InetAddress address, int port) ? ? ? ? 構(gòu)造數(shù)據(jù)報包,用來將長度為 length 的包發(fā)送到指定主機上的指定端口號。
- DatagramPacket(byte[] buf, int offset, int length) ? ? ? ? ?構(gòu)造 DatagramPacket,用來接收長度為 length 的包,在緩沖區(qū)中指定了偏移量。
- DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) ? ? ? ? ? 構(gòu)造數(shù)據(jù)報包,用來將長度為 length 偏移量為 offset 的包發(fā)送到指定主機上的指定端口號。
- DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) ? ? ? ?構(gòu)造數(shù)據(jù)報包,用來將長度為 length 偏移量為 offset 的包發(fā)送到指定主機上的指定端口號。
- DatagramPacket(byte[] buf, int length, SocketAddress address) ? ? ? ? ? 構(gòu)造數(shù)據(jù)報包,用來將長度為 length 的包發(fā)送到指定主機上的指定端口號。
(2)地址
- getAddress() InetAddress? 返回某臺機器的 IP 地址,此數(shù)據(jù)報將要發(fā)往該機器或者是從該機器接收到的。
- getPort() int? ?返回某臺遠程主機的端口號,此數(shù)據(jù)報將要發(fā)往該主機或者是從該主機接收到的。
- getSocketAddress() SocketAddress? ??獲取要將此包發(fā)送到的或發(fā)出此數(shù)據(jù)報的遠程主機的 SocketAddress(通常為 IP 地址 + 端口號)。
- setAddress(InetAddress iaddr) void? ?設(shè)置要將此數(shù)據(jù)報發(fā)往的那臺機器的 IP 地址。
- setPort(int iport) ?void? ??設(shè)置要將此數(shù)據(jù)報發(fā)往的遠程主機上的端口號。
- setSocketAddress(SocketAddress address) ?void? 設(shè)置要將此數(shù)據(jù)報發(fā)往的遠程主機的 SocketAddress(通常為 IP 地址 + 端口號)。
(3)數(shù)據(jù)
- getData() byte[] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回數(shù)據(jù)緩沖區(qū)。
- getLength() int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回將要發(fā)送或接收到的數(shù)據(jù)的長度。
- getOffset() int ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回將要發(fā)送或接收到的數(shù)據(jù)的偏移量。
- setAddress(InetAddress iaddr) void ? ? ? ? ? ? ? ? ? ? ? ?設(shè)置要將此數(shù)據(jù)報發(fā)往的那臺機器的 IP 地址。
- setData(byte[] buf) void ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為此包設(shè)置數(shù)據(jù)緩沖區(qū)。
- setData(byte[] buf, int offset, int length) ?void ? ? ? ? ?為此包設(shè)置數(shù)據(jù)緩沖區(qū)。
- setLength(int length) ??void ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為此包設(shè)置長度。
?
七、URL
(1)構(gòu)造方法
- URL(String spec) 根據(jù) String 表示形式創(chuàng)建 URL 對象。
- URL(String protocol, String host, int port, String file) 根據(jù)指定 protocol、host、port 號和 file 創(chuàng)建 URL 對象。
- URL(String protocol, String host, int port, String file, URLStreamHandler handler) 根據(jù)指定的 protocol、host、port 號、file 和 handler 創(chuàng)建 URL 對象。
- URL(String protocol, String host, String file) 根據(jù)指定的 protocol 名稱、host 名稱和 file 名稱創(chuàng)建 URL。
- URL(URL context, String spec) 通過在指定的上下文中對給定的 spec 進行解析創(chuàng)建 URL。
- URL(URL context, String spec, URLStreamHandler handler) ?通過在指定的上下文中用指定的處理程序?qū)o定的 spec 進行解析來創(chuàng)建 URL。
?
(2)URL信息
- getDefaultPort() int? 獲取與此 URL 關(guān)聯(lián)協(xié)議的默認(rèn)端口號。
- getFile() String? ? 獲取此 URL 的文件名。
- getHost() String? ? 獲取此 URL 的主機名(如果適用)。
- getPath() String? ?獲取此 URL 的路徑部分。
- getPort() int? 獲取此 URL 的端口號。
- getProtocol() String? 獲取此 URL 的協(xié)議名稱。
- getQuery() String? 獲取此 URL 的查詢部分。
- getRef() String? 獲取此 URL 的錨點(也稱為“引用”)。
(3)連接
- openConnection() URLConnection? 返回一個 URLConnection 對象,它表示到 URL 所引用的遠程對象的連接。
- openConnection(Proxy proxy) URLConnection? ??與 openConnection() 類似,所不同是連接通過指定的代理建立;不支持代理方式的協(xié)議處理程序?qū)⒑雎栽摯韰?shù)并建立正常的連接。
- openStream() ? InputStream? 打開到此 URL 的連接并返回一個用于從該連接讀入的 InputStream。
(4)文本內(nèi)容
- getContent() Object? 獲取此 URL 的內(nèi)容。?
- getContent(Class[] classes) Object?? ? 獲取此 URL 的內(nèi)容。?
?
總結(jié)
以上是生活随笔為你收集整理的Java Socket编程总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 代理总结
- 下一篇: Java Servlet总结