Java收集編程基本教程之Socket入門實例。本站提示廣大學習愛好者:(Java收集編程基本教程之Socket入門實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java收集編程基本教程之Socket入門實例正文
當我們想要在Java中應用TCP/IP經由過程收集銜接到辦事器時,就須要創立java.net.Socket對象並銜接到辦事器。假設願望應用Java NIO,也能夠創立Java NIO中的SocketChannel對象。
創立Socket
上面的示例代碼是銜接到IP地址為78.64.84.171辦事器上的80端口,這台辦事器就是我們的Web辦事器(www.jb51.net),而80端口就是Web辦事端口。
Socket socket = new Socket("78.46.84.171", 80);
我們也能夠像以下示例中應用域名取代IP地址:
Socket socket = new Socket("jb51.net", 80);
Socket發送數據
要經由過程Socket發送數據,我們須要獲得Socket的輸入流(OutputStream),示例代碼以下:
Socket socket = new Socket("jb51.net", 80);
OutputStream out = socket.getOutputStream();
out.write("some data".getBytes());
out.flush();
out.close();
socket.close();
代碼異常簡略,然則想要經由過程收集將數據發送到辦事器端,必定不要忘卻挪用flush()辦法。操作體系底層的TCP/IP完成會先將數據放入一個更年夜的數據緩存塊中,而緩存塊的年夜小是與TCP/IP的數據包年夜小相順應的。(譯者注:挪用flush()辦法只是將數據寫入操作體系緩存中,其實不包管數據會立刻發送)
Socket讀取數據
從Socket中讀取數據,我們就須要獲得Socket的輸出流(InputStream),代碼以下:
Socket socket = new Socket("jb51.net", 80);
InputStream in = socket.getInputStream();
int data = in.read();
//... read more data...
in.close();
socket.close();
代碼也其實不龐雜,但須要留意的是,從Socket的輸出流中讀取數據其實不能讀取文件那樣,一向挪用read()辦法直到前往-1為止,由於對Socket而言,只要當辦事端封閉銜接時,Socket的輸出流才會前往-1,而是現實上辦事器其實不會一直地封閉銜接。假定我們想要經由過程一個銜接發送多個要求,那末在這類情形下封閉銜接就顯得異常愚昧。
是以,從Socket的輸出流中讀取數據時我們必需要曉得須要讀取的字節數,這可以經由過程讓辦事器在數據中告訴發送了若干字節來完成,也能夠采取在數據末尾設置特別字符標志的方法連完成。
封閉Socket
當應用完Socket後我們必需將Socket封閉,斷開與辦事器之間的銜接。封閉Socket只須要挪用Socket.close()辦法便可,代碼以下:
Socket socket = new Socket("jb51.net", 80);
socket.close();
(全文完)