1.如何連接到服務(wù)器
1.1 Socket常用方法
·Socket(String host专钉,int port)
構(gòu)建一個套接字,用來連接給定的主機和端口累铅。
·InputStream getInputStream()
·OutputStream getOutputStream()
獲取可以從套接字中讀取數(shù)據(jù)的流跃须,以及可以向套接字寫出數(shù)據(jù)的流。
2.實現(xiàn)服務(wù)器
2.1 服務(wù)器工作原理
- 一旦啟動服務(wù)器程序娃兽,它便等待某個客戶端連接到它的端口
2.2實現(xiàn)
ServerSocket s =new ServerSocket(8080)
·ServerSocket(int port)
創(chuàng)建一個監(jiān)聽端口的服務(wù)器套接字菇民。
·Socket s.accept()
等待連接
·InputStream socket.geSocket.InputStream()
獲取客戶端向服務(wù)器的輸入流
·OutputStream socket.getOutputStream()
獲取服務(wù)器向客戶端的輸出流
·void s.close()
關(guān)閉服務(wù)器套接字
2.3半關(guān)閉
- 關(guān)閉一個套接字連接的輸入流或輸出流,而不是關(guān)閉整個套接字導致連接斷開
Socket s
·void s.shutdownOutput()
將輸出流設(shè)為“流結(jié)束”换薄。
·void s.shutdownInput()
將輸入流設(shè)為“流結(jié)束”玉雾。
·boolean s.isOutputShutdown()
如果輸出已被關(guān)閉,則返回true轻要。
·boolean s.isInputShutdown()
如果輸入已被關(guān)閉复旬,則返回true。
3.可中斷套接字
- 普通的套間字在建立連接和讀寫操作時冲泥,會一直阻塞
- 當線程因套接字無法響應(yīng)而發(fā)生阻塞時驹碍,則無法通過調(diào)用interrupt來解除阻塞
- 中斷套接字建立的連接壁涎,客戶端可以主動斷開
java.net.InetSocketAddress
·InetSocketAddress(String hostname,int port)
通過主機和端口參數(shù)創(chuàng)建一個地址對象志秃,并在創(chuàng)建過程中解析主機名怔球。如果主機名不能被解析,那么該地址對象的unresolved屬性將被設(shè)為true浮还。
·boolean isUnresolved()如果不能解析該地址對象竟坛,則返回true。
java.nio.channels.SocketChannel
·static SocketChannel open(SocketAddress address)
打開一個套接字通道钧舌,并將其連接到遠程地址担汤。
java.nio.channels.Channels 1.4
·static InputStreamnewInputStream(ReadableByteChannel channel)
創(chuàng)建一個輸入流,用以從指定的通道讀取數(shù)據(jù)洼冻≌钙纾·
static OutputStreamnewOutputStream(WritableByteChannel channel)創(chuàng)建一個輸出流,用以向指定的通道寫入數(shù)據(jù)撞牢。
4.web相關(guān)
4.1 URI率碾、URL
- URI:統(tǒng)一資源標志符,包含用來指定Web資源的字符串的各種組成部分
- URL:統(tǒng)一資源定位符屋彪,包含了用于定位Web資源的足夠信息所宰。URL是URI的特例
4.2 使用URLConnection
獲取信息
·void setDoOutput(boolean doOutput)
設(shè)置為true,允許向服務(wù)器寫入信息撼班。使用post方法時歧匈,需要設(shè)為true,將參數(shù)寫入
4.3 提交表單
-
URLConnection
對象首先向服務(wù)器發(fā)送一個請求頭砰嘁。當提交表單數(shù)據(jù)時件炉,該請求頭包含下面這行內(nèi)容
Context-Type:application/x-www-form-urlencoded
4.3.1 GET
-
get
請求會把請求參數(shù)使用?
追加到url
之后,多個參數(shù)使用and
連接
- 參數(shù)編碼
-
A-Z
、a-z
矮湘、0-9
斟冕、.-*_
原樣輸出
- 空格使用
+
代替
- 將其他所有字符編碼為
UTF-8
,并將每個字節(jié)都編碼為%后面緊跟一個兩位的十六進制數(shù)字
-
get
請求接收的數(shù)據(jù)大小有限制缅阳,且參數(shù)在url
上明文顯示
4.3.2 POST
-
post
請求的參數(shù)也會使用上面的編碼方式
- 從
URLConnection
獲取輸出流磕蛇,并將名-值對寫入該流中。當然十办,仍然需要對這些值進行URL編碼秀撇,并用&字符將它們隔開
-
post
的參數(shù)是使用UrlConncetion
得到outputstream
寫回服務(wù)器的
5.發(fā)送email
- 原理也是使用
socket
-
Java
封裝了一套JavaMail
API