亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java----Socket編程之模擬客戶端Client

2019-11-06 06:23:27
字體:
來源:轉載
供稿:網友

Socket的英文原義是“孔”或“插座”,作為BSD UNIX的進程通信機制,取后一種意思。通常也稱作”套接字”,網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。 以java為例,Socket和ServerSocket類庫位于java.net包中。ServerSocket用于服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對于一個網絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。

1.Socket類的構造

Socket的構造方法有以下幾種重載形式:

Socket() Socket(InetAddress address, int port)Socket(InetAddress address, int port, InetAddress localAddr, int localPort) Socket(String host, int port)Socket(String host, int port, InetAddress localAddr, int localPort)

除了第一個不帶參數的構造方法以外, 其他構造方法都會試圖建立與服務器的連接, 如果連接成功, 就返回 Socket對象; 如果因為某些原因連接失敗, 就會拋出IOException .

//使用無參數構造方法, 設定等待建立連接的超時時間 Socket socket = new Socket();SocketAddress remoteAddr = new InetSocketAddress(192.168.0.1,9000);socket.connect(remoteAddr, 60000); //等待建立連接的超時時間為1分鐘//使用服務端ip端口的構造方法socket = new Socket(192.168.0.1, 9000);socket.setSoTimeout(60000);//等待建立連接的超時時間為1分鐘//使用對端參數,同時設置客戶端的參數信息InetAddress localAddr = InetAddress.getByName("192.168.0.2");//獲取本地IP對應的InetAddressSocket socket1 = new Socket(192.168.0.1, 9000, localAddr1, 9012);//設置本地端口為9012

Socket 類提供了3 個狀態測試方法.

isClosed(): 如果Socket已經連接到遠程主機, 并且還沒有關閉, 則返回true , 否則返回false . isConnected(): 如果Socket曾經連接到遠程主機, 則返回true , 否則返回false . isBound(): 如果Socket已經與一個本地端口綁定, 則返回true , 否則返回false .

2.Socket的選項參數設置

Socket 有以下幾個選項: TCP_NODELAY: 表示立即發送數據. SO_RESUSEADDR: 表示是否允許重用Socket 所綁定的本地地址. SO_TIMEOUT: 表示接收數據時的等待超時數據. SO_LINGER: 表示當執行Socket 的 close()方法時, 是否立即關閉底層的Socket. SO_SNFBUF: 表示發送數據的緩沖區的大小. SO_RCVBUF: 表示接收數據的緩沖區的大小. SO_KEEPALIVE: 表示對于長時間處于空閑狀態的Socket , 是否要自動把它關閉. OOBINLINE: 表示是否支持發送一個字節的TCP 緊急數據. 這些具體用法將專門寫一篇文章來介紹,在此不多贅述。

3.通過Socket發送/接收數據

如果已成功建立Socket連接,我們如何向其中寫入數據呢?需要使用getOutputStream()方法來獲得輸出流,然后使用write方法寫入byte數據。

OutputStream os = socket.getOutputStream();//獲取輸出流byte[] packet = "Hello".getBytes("");//將發送數據轉換為字節os.write(packet);//向輸出流中寫入os.flush();//刷新緩沖,將緩沖區中的數據全部取出來

同樣讀取數據使用了InputStream輸入流

InputStream is = socket.getInputStream();//獲取輸入流byte[] lengthBytes = new byte[8];is.read(lengthBytes);//讀取前八位

4.關閉Socket

Socket通信會占用包括接口在內的很多資源,所以當通信結束時,及時關閉Socket 就顯得非常重要, Socket 的 close() 方法負責關閉Socket。為了確保每次通信成功與否都會關閉Socket,所以我們一般將關閉方法寫在finally塊中。 例如:

Socket socket = null;try{ socket = new Socket(192.168.0.1,8000); }catch(Exception e){ e.PRintStackTrace(); }finally{ try{ if(socket != null){ socket.close(); } }catch(Exception e){ e.printStackTrace(); } }

4.完整程序示例

import java.io.DataInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.SocketTimeoutException;public class SocketClient { //模擬Socket客戶端 private String host; private int port; private int soTimeout; /** * @Title: send * @Description: 發送報文,用于向指定的服務端發送消息 * @param msg 發送的消息 * @param index * @return * @throws Exception */ public String send(String msg) throws Exception { //發送 Socket socket = null; String data = msg; String returnmsg = null; try { try { socket = new Socket(host, port);//建立連接 }catch(Exception e){ System.out.println("連接服務器失敗,連接ip:"+host+",端口:"+port); } socket.setSoTimeout(soTimeout); OutputStream os = socket.getOutputStream(); byte[] packet = data.getBytes("UTF-8"); os.write(packet);//發送數據 os.flush(); InputStream is = socket.getInputStream(); DataInputStream in=new DataInputStream(is); //服務端返回的數據帶有8位數據長度,先讀取前8位長度,再按照長度讀取后面內容 byte[] lengthBytes = new byte[8]; is.read(lengthBytes); String length = ""; for(int i=0;i<lengthBytes.length;i++){ char temp=(char) lengthBytes[i]; length=length+temp; } byte returnContent[] = new byte[Integer.parseInt(length)]; in.read(returnContent); returnmsg = new String(returnContent, "UTF-8"); System.out.println(returnmsg); // 讀取返回消息 }catch (Exception e) { System.out.println("處理失敗,原因:"+e.getMessage()); } finally { try { socket.close(); } catch (Exception e) { System.out.println(); } } return returnmsg; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public int getSoTimeout() { return soTimeout; } public void setSoTimeout(int soTimeout) { this.soTimeout = soTimeout; }}

參考文章: http://blog.csdn.net/semillon/article/details/7515926


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕精品—区二区| 亚洲第一区中文99精品| 26uuu国产精品视频| 欧美成人免费大片| 日韩一区二区三区国产| 国产精品久久久久久影视| 日韩激情视频在线播放| 精品中文字幕在线2019| 精品久久久久久中文字幕大豆网| 欧美精品videosex极品1| 91网站在线看| 久久久亚洲欧洲日产国码aⅴ| www.日韩系列| 欧美中文字幕视频在线观看| 国产精品欧美久久久| 成人激情视频在线观看| 亚洲社区在线观看| 欧美激情一级精品国产| 欧美亚洲国产视频| 日韩在线免费av| 国产专区欧美专区| 日韩av片电影专区| 欧美黑人一区二区三区| 久久69精品久久久久久久电影好| 国产精品久在线观看| 亚洲国产精久久久久久| 久久成人av网站| 精品综合久久久久久97| 国产精品视频一| 日韩一区二区三区在线播放| 亚洲韩国青草视频| 国产91精品久久久久久| 国产精品国产自产拍高清av水多| 久久久久久久国产精品视频| 最近2019中文免费高清视频观看www99| 2020欧美日韩在线视频| 美女精品久久久| 久久的精品视频| 欧美性生交大片免费| 欧美www在线| 亚洲伊人成综合成人网| 国产精品一区二区久久| 亚洲xxxxx电影| 色综合色综合网色综合| 久久久国产一区二区三区| 18久久久久久| 中文字幕成人在线| 国产专区精品视频| 在线视频国产日韩| 综合136福利视频在线| 亚洲欧洲xxxx| 国产午夜精品久久久| 国产亚洲精品一区二555| 在线观看91久久久久久| 午夜精品久久久久久久久久久久久| 欧美极品少妇与黑人| 久久乐国产精品| 亚洲免费精彩视频| 国产精品美女免费视频| 国产一区二区三区视频| 亚洲黄一区二区| 久久综合九色九九| 亚洲天堂男人天堂女人天堂| 国产精品亚洲网站| 欧美性感美女h网站在线观看免费| 在线播放国产精品| 精品国内自产拍在线观看| 国产成人a亚洲精品| 国产精品久久久久久久电影| 亚洲九九九在线观看| 午夜精品一区二区三区在线视频| 久久久久久久97| 久久亚洲私人国产精品va| 亚洲aaa激情| 亚洲福利视频在线| 4438全国成人免费| 欧美成人手机在线| 久久久久久综合网天天| 成人免费激情视频| 亚洲一区二区久久久久久| 91高清视频免费观看| 欧美黄色片在线观看| 日韩精品在线观看视频| 狠狠躁夜夜躁人人躁婷婷91| 成人午夜在线观看| 亚洲视屏在线播放| 一区二区三区在线播放欧美| 国产综合在线视频| 欧美一级电影免费在线观看| 国产精品精品一区二区三区午夜版| 精品欧美aⅴ在线网站| 超碰97人人做人人爱少妇| 成人免费观看网址| 精品视频一区在线视频| 亚洲毛片在线免费观看| 深夜成人在线观看| 欧美精品成人91久久久久久久| 欧洲成人免费视频| 日韩在线观看免费av| 久久国产精品久久久久| 亚洲人成77777在线观看网| 九九热在线精品视频| 亚洲在线www| 亚洲欧美国产精品va在线观看| 97在线视频一区| 日韩久久免费视频| 日韩电视剧免费观看网站| 亚洲xxxxx性| 日本成人免费在线| 久久精品影视伊人网| 亚洲精品mp4| 久久噜噜噜精品国产亚洲综合| 国内精品久久久久影院 日本资源| 亚洲日本aⅴ片在线观看香蕉| 中文字幕国产精品久久| 欧美视频免费在线观看| 久久精品国产成人| 成人av电影天堂| 国产精品白嫩初高中害羞小美女| 久久久精品美女| 日韩精品欧美国产精品忘忧草| 欧美一级大片在线免费观看| 亚洲一级片在线看| 久久伊人精品视频| 中文字幕日韩综合av| 这里精品视频免费| 92看片淫黄大片看国产片| 欧美中文字幕视频在线观看| 中文字幕成人在线| 国产精品主播视频| 亚洲国产中文字幕久久网| 亚洲欧美国内爽妇网| 51ⅴ精品国产91久久久久久| 夜夜嗨av色一区二区不卡| 亚洲第一中文字幕| 亚洲va久久久噜噜噜久久天堂| 亚洲91精品在线| www.日韩视频| 中文字幕一区二区三区电影| 国产97在线播放| 国产亚洲欧美日韩美女| 欧美福利在线观看| 91精品国产99久久久久久| 精品久久中文字幕久久av| 国产成人精品在线观看| 另类专区欧美制服同性| 国产精品久久久久影院日本| 欧美性猛交xxxx免费看久久久| 亚洲视频一区二区三区| 亚洲香蕉成人av网站在线观看| 欧美性猛交xxxx免费看漫画| 91深夜福利视频| 欧美一级大片视频| 国产精品av网站| 欧美成人精品影院| 国产精品久久一| 欧美性xxxxx| 日韩欧美中文免费| 福利一区视频在线观看| 国产成人小视频在线观看| 色噜噜国产精品视频一区二区| 久久久久久999| 亚洲精品电影久久久| 国产在线精品播放|