亚洲成人久久久久_中文字幕aⅴ在线视频_久久天天躁狠狠躁夜夜2020_日韩av加勒比_久久精品免费一区二区喷潮_狂猛欧美激情性xxxx大豆行情_婷婷色吧_亚洲精品成人久久久_欧美一区二区三区久久综合_久久色影视_97超级碰碰碰精品色视频在线观看_疯狂撞击丝袜人妻_国产不卡在线视频_国产精品一区二区三区久久久_开心五月综合亚洲_永久在线播放_激情专区_97色图片_五月天狠狠操_精品国产福利在线视频

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

java Socket用法詳解 Socket的構(gòu)造方法有以下幾種重載形式

來源:CSDN 時間:2022-12-23 09:58:57

在客戶/服務(wù)器通信模式中, 客戶端需要主動創(chuàng)建與服務(wù)器連接的 Socket(套接字), 服務(wù)器端收到了客戶端的連接請求, 也會創(chuàng)建與客戶連接的 Socket. Socket可看做是通信連接兩端的收發(fā)器, 服務(wù)器與客戶端都通過 Socket 來收發(fā)數(shù)據(jù).

這篇文章首先介紹Socket類的各個構(gòu)造方法, 以及成員方法的用法, 接著介紹 Socket的一些選項(xiàng)的作用, 這些選項(xiàng)可控制客戶建立與服務(wù)器的連接, 以及接收和發(fā)送數(shù)據(jù)的行為.

一. 構(gòu)造Socket


(資料圖片僅供參考)

Socket的構(gòu)造方法有以下幾種重載形式:

Socket()  Socket(InetAddress address, int port) throws UnknowHostException, IOException  Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException  Socket(String host, int port) throws UnknowHostException, IOException  Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException  除了第一個不帶參數(shù)的構(gòu)造方法以外, 其他構(gòu)造方法都會試圖建立與服務(wù)器的連接, 如果連接成功, 就返回 Socket對象; 如果因?yàn)槟承┰蜻B接失敗, 就會拋出IOException .

1.1 使用無參數(shù)構(gòu)造方法, 設(shè)定等待建立連接的超時時間

Socket socket = new Socket(); SocketAddress remoteAddr = new InetSocketAddress("localhost",8000); socket.connect(remoteAddr, 60000); //等待建立連接的超時時間為1分鐘

以上代碼用于連接到本地機(jī)器上的監(jiān)聽8000端口的服務(wù)器程序, 等待連接的最長時間為1分鐘. 如果在1分鐘內(nèi)連接成功則connet()方法順利返回; 如果在1分鐘內(nèi)出現(xiàn)某種異常, 則拋出該異常; 如果超過1分鐘后, 即沒有連接成功, 也沒有出現(xiàn)其他異常, 那么會拋出 SocketTimeoutException. Socket 類的 connect(SocketAddress endpoint, int timeout) 方法負(fù)責(zé)連接服務(wù)器, 參數(shù)endpoint 指定服務(wù)器的地址, 參數(shù)timeout 設(shè)定超時數(shù)據(jù), 以毫秒為單位. 如果參數(shù)timeout 設(shè)為0, 表示永遠(yuǎn)不會超時, 默認(rèn)是不會超時的.

1.2 設(shè)定服務(wù)器的地址

除了第一個不帶參數(shù)的構(gòu)造方法, 其他構(gòu)造方法都需要在參數(shù)中設(shè)定服務(wù)器的地址, 包括服務(wù)器的IP地址或主機(jī)名, 以及端口:

Socket(InetAddress address, int port)              //第一個參數(shù)address 表示主機(jī)的IP地址 Socket(String host, int port)                              //第一個參數(shù)host 表示主機(jī)的名字

InetAddress 類表示服務(wù)器的IP地址, InetAddress 類提供了一系列靜態(tài)工廠方法, 用于構(gòu)造自身的實(shí)例, 例如:

//返回本地主機(jī)的IP地址 InetAddress addr1 = InetAddress.getLocalHost(); //返回代表 "222.34.5.7"的 IP地址 InetAddress addr2 = InetAddress.getByName("222.34.5.7"); //返回域名為"www.javathinker.org"的 IP地址 InetAddress addr3 = InetAddress.getByName("www.javathinker.org");

1.3 設(shè)定客戶端的地址

在一個Socket 對象中, 即包含遠(yuǎn)程服務(wù)器的IP 地址和端口信息, 也包含本地客戶端的IP 地址和端口信息. 默認(rèn)情況下, 客戶端的IP 地址來自于客戶程序所在的主機(jī), 客戶端的端口則由操作系統(tǒng)隨機(jī)分配. Socket類還有兩個構(gòu)造方法允許顯式地設(shè)置客戶端的IP 地址和端口:

//參數(shù)localAddr 和 localPort 用來設(shè)置客戶端的IP 地址和端口 Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException

如果一個主機(jī)同時屬于兩個以上的網(wǎng)絡(luò), 它就可能擁有兩個以上的IP 地址. 例如, 一個主機(jī)在Internet 網(wǎng)絡(luò)中的IP 地址為 "222.67.1.34", 在一個局域網(wǎng)中的IP 地址為 "112.5.4.3". 假定這個主機(jī)上的客戶程序希望和同一個局域網(wǎng)的一個服務(wù)器程序(地址為:"112.5.4.45: 8000")通信, 客戶端可按照如下方式構(gòu)造Socket 對象:

InetAddress remoteAddr1 = InetAddress.getByName("112.5.4.45"); InetAddress localAddr1 = InetAddress.getByName("112.5.4.3"); Socket socket1 = new Socket(remoteAddr1, 8000, localAddr1, 2345);   //客戶端使用端口2345

1.4 客戶連接服務(wù)器時可能拋出的異常

當(dāng)Socket 的構(gòu)造方法請求連接服務(wù)器時, 可能會拋出下面的異常.

UnKnownHostException: 如果無法識別主機(jī)的名字或IP 地址, 就會拋出這種異常.  ConnectException: 如果沒有服務(wù)器進(jìn)程監(jiān)聽指定的端口, 或者服務(wù)器進(jìn)程拒絕連接, 就會拋出這種異常.  SocketTimeoutException: 如果等待連接超時, 就會拋出這種異常.  BindException: 如果無法把Socket 對象與指定的本地IP 地址或端口綁定, 就會拋出這種異常. 以上4中異常都是IOException的直接或間接子類.      如圖2-1所示.

IOException------- UnknownHostException

|---- InterruptedIOException ----------- SocketTimeoutException

|---- SocketException              ----------- BindException

|---------- ConnectException

圖2-1 客戶端連接服務(wù)器時可能拋出的異常

二. 獲取Socket 的信息

在一個Socket 對象中同時包含了遠(yuǎn)程服務(wù)器的IP 地址和端口信息, 以及客戶本地的IP 地址和端口信息. 此外, 從Socket 對象中還可以獲得輸出流和輸入流, 分別用于向服務(wù)器發(fā)送數(shù)據(jù), 以及接收從服務(wù)器端發(fā)來的數(shù)據(jù). 以下方法用于獲取Socket的有關(guān)信息.

getInetAddress(): 獲得遠(yuǎn)程服務(wù)器的IP 地址.  getPort(): 獲得遠(yuǎn)程服務(wù)器的端口.  getLocalAddress(): 獲得客戶本地的IP 地址.  getLocalPort(): 獲得客戶本地的端口.  getInputStream(): 獲得輸入流. 如果Socket 還沒有連接, 或者已經(jīng)關(guān)閉, 或者已經(jīng)通過 shutdownInput() 方法關(guān)閉輸入流, 那么此方法會拋出IOException.  getOutputStream(): 獲得輸出流, 如果Socket 還沒有連接, 或者已經(jīng)關(guān)閉, 或者已經(jīng)通過 shutdownOutput() 方法關(guān)閉輸出流, 那么此方法會拋出IOException.  這里有個HTTPClient 類的例子, 代碼我是寫好了, 也測試過了, 因?yàn)槠蚓筒毁N了. 這個HTTPClient 類用于訪問網(wǎng)頁 www.javathinker.org/index.jsp. 該網(wǎng)頁位于一個主機(jī)名(也叫域名)為 www.javathinker.org 的遠(yuǎn)程HTTP服務(wù)器上, 它監(jiān)聽 80 端口. 在HTTPClient 類中, 先創(chuàng)建了一個連接到該HTTP服務(wù)器的Socket對象, 然后發(fā)送符合HTTP 協(xié)議的請求, 接著接收從HTTP 服務(wù)器上發(fā)回的響應(yīng)結(jié)果.

三. 關(guān)閉Socket

當(dāng)客戶與服務(wù)器的通信結(jié)束, 應(yīng)該及時關(guān)閉Socket , 以釋放Socket 占用的包括端口在內(nèi)的各種資源. Socket 的 close() 方法負(fù)責(zé)關(guān)閉Socket. 當(dāng)一個Socket對象被關(guān)閉, 就不能再通過它的輸入流和輸出流進(jìn)行I/O操作, 否則會導(dǎo)致IOException.

為了確保關(guān)閉Socket 的操作總是被執(zhí)行, 強(qiáng)烈建議把這個操作放在finally 代碼塊中:

Socket socket = null; try{socket = new Socket(www.javathinker.org,80); //執(zhí)行接收和發(fā)送數(shù)據(jù)的操作 .......... }catch(IOException e){e.printStackTrace(); }finally{try{if(socket != null) socket.close(); }catch(IOException e){e.printStackTrace();} }

Socket 類提供了3 個狀態(tài)測試方法.

isClosed(): 如果Socket已經(jīng)連接到遠(yuǎn)程主機(jī), 并且還沒有關(guān)閉, 則返回true , 否則返回false .  isConnected(): 如果Socket曾經(jīng)連接到遠(yuǎn)程主機(jī), 則返回true , 否則返回false .  isBound(): 如果Socket已經(jīng)與一個本地端口綁定, 則返回true , 否則返回false .  如果要判斷一個Socket 對象當(dāng)前是否處于連接狀態(tài), 可采用以下方式:

boolean isConnected = socket.isConnected() && !socket.isClosed();

四. 半關(guān)閉Socket

進(jìn)程A 與進(jìn)程B 通過Socket 通信, 假定進(jìn)程A 輸出數(shù)據(jù), 進(jìn)程B 讀入數(shù)據(jù). 進(jìn)程A 如何告訴進(jìn)程B 所有數(shù)據(jù)已經(jīng)輸出完畢? 下文略......

五. 設(shè)置Socket 的選項(xiàng)

Socket 有以下幾個選項(xiàng).

TCP_NODELAY: 表示立即發(fā)送數(shù)據(jù).  SO_RESUSEADDR: 表示是否允許重用Socket 所綁定的本地地址.  SO_TIMEOUT: 表示接收數(shù)據(jù)時的等待超時數(shù)據(jù).  SO_LINGER: 表示當(dāng)執(zhí)行Socket 的 close()方法時, 是否立即關(guān)閉底層的Socket.  SO_SNFBUF: 表示發(fā)送數(shù)據(jù)的緩沖區(qū)的大小.  SO_RCVBUF: 表示接收數(shù)據(jù)的緩沖區(qū)的大小.  SO_KEEPALIVE: 表示對于長時間處于空閑狀態(tài)的Socket , 是否要自動把它關(guān)閉.  OOBINLINE: 表示是否支持發(fā)送一個字節(jié)的TCP 緊急數(shù)據(jù).  5.1 TCP_NODELAY 選項(xiàng)

設(shè)置該選項(xiàng): public void setTcpNoDelay(boolean on) throws SocketException  讀取該選項(xiàng): public boolean getTcpNoDelay() throws SocketException  默認(rèn)情況下, 發(fā)送數(shù)據(jù)采用Negale 算法. Negale 算法是指發(fā)送方發(fā)送的數(shù)據(jù)不會立即發(fā)出, 而是先放在緩沖區(qū), 等緩存區(qū)滿了再發(fā)出. 發(fā)送完一批數(shù)據(jù)后, 會等待接收方對這批數(shù)據(jù)的回應(yīng), 然后再發(fā)送下一批數(shù)據(jù). Negale 算法適用于發(fā)送方需要發(fā)送大批量數(shù)據(jù), 并且接收方會及時作出回應(yīng)的場合, 這種算法通過減少傳輸數(shù)據(jù)的次數(shù)來提高通信效率.

如果發(fā)送方持續(xù)地發(fā)送小批量的數(shù)據(jù), 并且接收方不一定會立即發(fā)送響應(yīng)數(shù)據(jù), 那么Negale 算法會使發(fā)送方運(yùn)行很慢. 對于GUI 程序, 如網(wǎng)絡(luò)游戲程序(服務(wù)器需要實(shí)時跟蹤客戶端鼠標(biāo)的移動), 這個問題尤其突出. 客戶端鼠標(biāo)位置改動的信息需要實(shí)時發(fā)送到服務(wù)器上, 由于Negale 算法采用緩沖, 大大減低了實(shí)時響應(yīng)速度, 導(dǎo)致客戶程序運(yùn)行很慢.

TCP_NODELAY 的默認(rèn)值為 false, 表示采用 Negale 算法. 如果調(diào)用setTcpNoDelay(true)方法, 就會關(guān)閉 Socket的緩沖, 確保數(shù)據(jù)及時發(fā)送:

if(!socket.getTcpNoDelay()) socket.setTcpNoDelay(true);

如果Socket 的底層實(shí)現(xiàn)不支持TCP_NODELAY 選項(xiàng), 那么getTcpNoDelay() 和 setTcpNoDelay 方法會拋出 SocketException.

5.2 SO_RESUSEADDR 選項(xiàng)

設(shè)置該選項(xiàng): public void setResuseAddress(boolean on) throws SocketException  讀取該選項(xiàng): public boolean getResuseAddress() throws SocketException  當(dāng)接收方通過Socket 的close() 方法關(guān)閉Socket 時, 如果網(wǎng)絡(luò)上還有發(fā)送到這個Socket 的數(shù)據(jù), 那么底層的Socket 不會立即釋放本地端口, 而是會等待一段時間, 確保接收到了網(wǎng)絡(luò)上發(fā)送過來的延遲數(shù)據(jù), 然后再釋放端口. Socket接收到延遲數(shù)據(jù)后, 不會對這些數(shù)據(jù)作任何處理. Socket 接收延遲數(shù)據(jù)的目的是, 確保這些數(shù)據(jù)不會被其他碰巧綁定到同樣端口的新進(jìn)程接收到.

客戶程序一般采用隨機(jī)端口, 因此出現(xiàn)兩個客戶程序綁定到同樣端口的可能性不大. 許多服務(wù)器程序都使用固定的端口. 當(dāng)服務(wù)器程序關(guān)閉后, 有可能它的端口還會被占用一段時間, 如果此時立刻在同一個主機(jī)上重啟服務(wù)器程序, 由于端口已經(jīng)被占用, 使得服務(wù)器程序無法綁定到該端口, 啟動失敗. (第三篇文章會對此作出介紹).

為了確保一個進(jìn)程關(guān)閉Socket 后, 即使它還沒釋放端口, 同一個主機(jī)上的其他進(jìn)程還可以立即重用該端口, 可以調(diào)用Socket 的setResuseAddress(true) 方法:

if(!socket.getResuseAddress()) socket.setResuseAddress(true);

值得注意的是 socket.setResuseAddress(true) 方法必須在 Socket 還沒有綁定到一個本地端口之前調(diào)用, 否則執(zhí)行 socket.setResuseAddress(true) 方法無效. 因此必須按照以下方式創(chuàng)建Socket 對象, 然后再連接遠(yuǎn)程服務(wù)器:

Socket socket = new Socket();            //此時Socket對象未綁定本地端口,并且未連接遠(yuǎn)程服務(wù)器 socket.setReuseAddress(true); SocketAddress remoteAddr = new InetSocketAddress("localhost",8000); socket.connect(remoteAddr);              //連接遠(yuǎn)程服務(wù)器, 并且綁定匿名的本地端口

或者:

Socket socket = new Socket();              //此時Socke 對象為綁定本地端口, 并且未連接遠(yuǎn)程服務(wù)器 socket.setReuseAddress(true); SocketAddress localAddr = new InetSocketAddress("localhost",9000); SocketAddress remoteAddr = new InetSocketAddress("localhost",8000); socket.bind(localAddr);             //與本地端口綁定 socket.connect(remoteAddr); //連接遠(yuǎn)程服務(wù)器

此外, 兩個共用同一個端口的進(jìn)程必須都調(diào)用 socket.setResuseAddress(true) 方法, 才能使得一個進(jìn)程關(guān)閉 Socket后, 另一個進(jìn)程的 Socket 能夠立即重用相同端口.

5.3 SO_TIMEOUT 選項(xiàng)

設(shè)置該選項(xiàng): public void setSoTimeout(int milliseconds) throws SocketException  讀取該選項(xiàng): public int getSoTimeout() throws SocketException  當(dāng)通過Socket 的輸入流讀數(shù)據(jù)時, 如果還沒有數(shù)據(jù), 就會等待. 例如, 在以下代碼中, in.read(buff) 方法從輸入流中讀入 1024個字節(jié):

byte[] buff = new byte[1024]; InputStream in = socket.getInputStream(); in.read(buff);

如果輸入流中沒有數(shù)據(jù), in.read(buff) 就會等待發(fā)送方發(fā)送數(shù)據(jù), 直到滿足以下情況才結(jié)束等待:

略...............

Socket 類的 SO_TIMEOUT 選項(xiàng)用于設(shè)定接收數(shù)據(jù)的等待超時時間, 單位為毫秒, 它的默認(rèn)值為 0, 表示會無限等待, 永遠(yuǎn)不會超時. 以下代碼把接收數(shù)據(jù)的等待超時時間設(shè)為 3 分鐘:

if(socket.getSoTimeout() == 0) socket.setSoTimeout(60000 * 3);   //注意, 原書中這里的代碼錯誤, 里面的方法名字都少了"So"

Socket 的 setSoTimeout() 方法必須在接收數(shù)據(jù)之前執(zhí)行才有效. 此外, 當(dāng)輸入流的 read()方法拋出 SocketTimeoutException 后, Socket 仍然是連接的, 可以嘗試再次讀數(shù)據(jù):

socket.setSoTimeout(180000); byte[] buff = new byte[1024]; InputStream in = socket.getInputStream(); int len = -1; do{try{len = in.read(buff); //處理讀到的數(shù)據(jù) //......... }catch(SocketTimeoutException e){//e.printStackTrace();  System.out.println("等待讀超時!"); len = 0; }     }while(len != -1);

例子ReceiveServer.java 和 SendClient.java 是一對簡單的服務(wù)器/客戶程序. sendClient 發(fā)送字符串 "hello everyone" ,接著睡眠 1 分鐘, 然后關(guān)閉 Socket. ReceiveServer 讀取 SendClient 發(fā)送來的數(shù)據(jù), 直到抵達(dá)輸入流的末尾, 最后打印 SendClient 發(fā)送來的數(shù)據(jù).

ReceiveServer.java 略....... ,         SendClient.java 略..........

在 SendClient 發(fā)送字符串 "hello everyone" 后, 睡眠 1 分鐘. 當(dāng) SendClient 在睡眠時, ReceiveServer 在執(zhí)行 in.read(buff) 方法, 不能讀到足夠的數(shù)據(jù)填滿 buff 緩沖區(qū), 因此會一直等待 SendClient 發(fā)送數(shù)據(jù). 如果在 ReceiveServer 類中 socket.setSoTimeout(20000) , 從而把等待接收數(shù)據(jù)的超時時間設(shè)為 20 秒, 那么 ReceiveServer 在等待數(shù)據(jù)時, 每當(dāng)超過 20 秒, 就會拋出SocketTimeoutException . 等到 SendClient 睡眠 1 分鐘后, SendClient 調(diào)用 Socket 的 close() 方法關(guān)閉 Socket, 這意味著 ReceiveServer 讀到了輸入流的末尾, ReceiveServer 立即結(jié)束讀等待, read() 方法返回 -1 . ReceiveServer最后打印接收到的字符串 "hello everyone", 結(jié)果如下:

等待讀超時! 等待讀超時! hello everyone

5.4 SO_LINGER 選項(xiàng)

設(shè)置該選項(xiàng): public void setSoLinger(boolean on, int seconds) throws SocketException  讀取該選項(xiàng): public int getSoLinger() throws SocketException  SO_LINGER 選項(xiàng)用來控制 Socket 關(guān)閉時的行為. 默認(rèn)情況下, 執(zhí)行 Socket 的 close() 方法, 該方法會立即返回, 但底層的 Socket 實(shí)際上并不立即關(guān)閉, 它會延遲一段時間, 直到發(fā)送完所有剩余的數(shù)據(jù), 才會真正關(guān)閉 Socket, 斷開連接.

如果執(zhí)行以下方法:

socket.setSoLinger(true, 0);

那么執(zhí)行Socket 的close() 方法, 該方法也會立即返回, 并且底層的 Socket 也會立即關(guān)閉, 所有未發(fā)送完的剩余數(shù)據(jù)被丟棄.

如果執(zhí)行以下方法:

socket.setSoLinger(true, 3600);

那么執(zhí)行Socket 的 close() 方法, 該方法不會立即返回, 而是進(jìn)入阻塞狀態(tài). 同時, 底層的 Socket 會嘗試發(fā)送剩余的數(shù)據(jù). 只有滿足以下兩個條件之一, close() 方法才返回:

⑴ 底層的 Socket 已經(jīng)發(fā)送完所有的剩余數(shù)據(jù);

⑵ 盡管底層的 Socket 還沒有發(fā)送完所有的剩余數(shù)據(jù), 但已經(jīng)阻塞了 3600 秒(注意這里是秒, 而非毫秒), close() 方法的阻塞時間超過 3600 秒, 也會返回, 剩余未發(fā)送的數(shù)據(jù)被丟棄.

值得注意的是, 在以上兩種情況內(nèi), 當(dāng)close() 方法返回后, 底層的 Socket 會被關(guān)閉, 斷開連接. 此外, setSoLinger(boolean on, int seconds) 方法中的 seconds 參數(shù)以秒為單位, 而不是以毫秒為單位.

如果未設(shè)置 SO_LINGER 選項(xiàng), getSoLinger() 返回的結(jié)果是 -1, 如果設(shè)置了 socket.setSoLinger(true, 80) , getSoLinger() 返回的結(jié)果是 80.

Tips: 當(dāng)程序通過輸出流寫數(shù)據(jù)時, 僅僅表示程序向網(wǎng)絡(luò)提交了一批數(shù)據(jù), 由網(wǎng)絡(luò)負(fù)責(zé)輸送到接收方. 當(dāng)程序關(guān)閉 Socket, 有可能這批數(shù)據(jù)還在網(wǎng)絡(luò)上傳輸, 還未到達(dá)接收方. 這里所說的 "未發(fā)送完的數(shù)據(jù)" 就是指這種還在網(wǎng)絡(luò)上傳輸, 未被接收方接收的數(shù)據(jù).

例子 SimpleClient.java 與 SimpleServer.java 所示是一對簡單的客戶/服務(wù)器程序. SimpleClient 類發(fā)送一萬個字符給 SimpleServer, 然后調(diào)用Socket 的 close() 方法關(guān)閉 Socket.

SimpleServer 通過 ServerSocket 的 accept() 方法接受了 SimpleClient 的連接請求后, 并不立即接收客戶發(fā)送的數(shù)據(jù), 而是睡眠 5 秒鐘后再接收數(shù)據(jù). 等到 SimpleServer 開始接收數(shù)據(jù)時, SimpleClient 有可能已經(jīng)執(zhí)行了 Socket 的close() 方法, 那么 SimpleServer 還能接收到 SimpleClient 發(fā)送的數(shù)據(jù)嗎?

SimpleClient.java 略..., SimpleServer.java 略......

SimpleClient.java中

System.out.println("開始關(guān)閉 Socket"); long begin = System.currentTimeMillis(); socket.close(); long end = System.currentTimeMillis(); System.out.println("關(guān)閉Socket 所用的時間為:" + (end - begin) + "ms");

下面分 3 種情況演示 SimpleClient 關(guān)閉 Socket 的行為.

⑴ 未設(shè)置 SO_LINGER 選項(xiàng), 當(dāng) SimpleClient 執(zhí)行 Socket 的close() 方法時, 立即返回, SimpleClient 的打印結(jié)果如下:

開始關(guān)閉 Socket 關(guān)閉Socket 所用的時間為:0ms

等到 SimpleClient 結(jié)束運(yùn)行, SimpleServer 可能才剛剛結(jié)束睡眠, 開始接收 SimpleClient 發(fā)送的數(shù)據(jù). 此時盡管 SimpleClient 已經(jīng)執(zhí)行了 Socket 的 close() 方法, 并且 SimpleClient 程序本身也運(yùn)行結(jié)束了, 但從 SimpleServer 的打印結(jié)果可以看出, SimpleServer 仍然接收到了所有的數(shù)據(jù). 之所以出現(xiàn)這種情況, 是因?yàn)楫?dāng) SimpleClient 執(zhí)行了 Socket 的 close() 方法后, 底層的 Socket 實(shí)際上并沒有真正關(guān)閉, 與 SimpleServer 的連接依然存在. 底層的 Socket 會存在一段時間, 直到發(fā)送完所有的數(shù)據(jù).

⑵ 設(shè)置SO_LINGER 選項(xiàng), socket.setSoLinger(true, 0). 這次當(dāng) SimpleClient 執(zhí)行 Socket 的 close() 方法時, 會強(qiáng)行關(guān)閉底層的 Socket, 所有未發(fā)送完的數(shù)據(jù)丟失. SimpleClient 的打印結(jié)果如下:

開始關(guān)閉 Socket 關(guān)閉Socket 所用的時間為:0ms

從打印結(jié)果看出, SimpleClient 執(zhí)行 Socket 的 close() 方法時, 也立即返回. 當(dāng) SimpleServer 結(jié)束睡眠, 開始接收 SimpleClient 發(fā)送的數(shù)據(jù)時, 由于 SimpleClient 已經(jīng)關(guān)閉底層 Socket, 斷開連接, 因此 SimpleServer 在讀數(shù)據(jù)時會拋出 SocketException:

java.net.SocketException: Connection reset

⑶ 設(shè)置SO_LINGER 選項(xiàng), socket.setSoLinger(true, 3600). 這次當(dāng) SimpleClient 執(zhí)行 Socket 的close() 方法時, 會進(jìn)入阻塞狀態(tài), 知道等待了 3600 秒, 或者底層 Socket 已經(jīng)把所有未發(fā)送的剩余數(shù)據(jù)發(fā)送完畢, 才會從 close() 方法返回. SimpleClient 的打印結(jié)果如下:

開始關(guān)閉 Socket 關(guān)閉Socket 所用的時間為:5648ms

當(dāng) SimpleServer 結(jié)束了 5 秒鐘的睡眠, 開始接收 SimpleClient 發(fā)送的數(shù)據(jù)時, SimpleClient 還在這些 Socket 的close() 方法, 并且處于阻塞狀態(tài). SimpleClient 與 SimpleServer 之間的連接依然存在, 因此 SimpleServer 能夠接收到 SimpleClient 發(fā)送的所有數(shù)據(jù).

5.5 SO_RCVBUF 選項(xiàng)

設(shè)置該選項(xiàng): public void setReceiveBufferSize(int size) throws SocketException  讀取該選項(xiàng): public int getReceiveBufferSize() throws SocketException  SO_RCVBUF 表示 Socket 的用于輸入數(shù)據(jù)的緩沖區(qū)的大小. 一般說來, 傳輸大的連續(xù)的數(shù)據(jù)塊(基于HTTP 或 FTP 協(xié)議的通信) 可以使用較大的緩沖區(qū), 這可以減少傳輸數(shù)據(jù)的次數(shù), 提高傳輸數(shù)據(jù)的效率. 而對于交互頻繁且單次傳送數(shù)據(jù)量比較小的通信方式(Telnet 和 網(wǎng)絡(luò)游戲), 則應(yīng)該采用小的緩沖區(qū), 確保小批量的數(shù)據(jù)能及時發(fā)送給對方. 這種設(shè)定緩沖區(qū)大小的原則也同樣適用于 Socket 的 SO_SNDBUF 選項(xiàng).

如果底層 Socket 不支持 SO_RCVBUF 選項(xiàng), 那么 setReceiveBufferSize() 方法會拋出 SocketException.

5.6 SO_SNDBUF 選項(xiàng)

設(shè)置該選項(xiàng): public void setSendBufferSize(int size) throws SocketException  讀取該選項(xiàng): public int getSendBufferSize() throws SocketException  SO_SNDBUF 表示 Socket 的用于輸出數(shù)據(jù)的緩沖區(qū)的大小. 如果底層 Socket 不支持 SO_SNDBUF 選項(xiàng), setSendBufferSize() 方法會拋出 SocketException.

5.7 SO_KEEPALIVE 選項(xiàng)

設(shè)置該選項(xiàng): public void setKeepAlive(boolean on) throws SocketException  讀取該選項(xiàng): public boolean getKeepAlive() throws SocketException //原書中這個方法返回的類型是int  當(dāng) SO_KEEPALIVE 選項(xiàng)為 true 時, 表示底層的TCP 實(shí)現(xiàn)會監(jiān)視該連接是否有效. 當(dāng)連接處于空閑狀態(tài)(連接的兩端沒有互相傳送數(shù)據(jù)) 超過了 2 小時時, 本地的TCP 實(shí)現(xiàn)會發(fā)送一個數(shù)據(jù)包給遠(yuǎn)程的 Socket. 如果遠(yuǎn)程Socket 沒有發(fā)回響應(yīng), TCP實(shí)現(xiàn)就會持續(xù)嘗試 11 分鐘, 直到接收到響應(yīng)為止. 如果在 12 分鐘內(nèi)未收到響應(yīng), TCP 實(shí)現(xiàn)就會自動關(guān)閉本地Socket, 斷開連接. 在不同的網(wǎng)絡(luò)平臺上, TCP實(shí)現(xiàn)嘗試與遠(yuǎn)程Socket 對話的時限有所差別.

SO_KEEPALIVE 選項(xiàng)的默認(rèn)值為 false, 表示TCP 不會監(jiān)視連接是否有效, 不活動的客戶端可能會永遠(yuǎn)存在下去, 而不會注意到服務(wù)器已經(jīng)崩潰.

以下代碼把 SO_KEEPALIVE 選項(xiàng)設(shè)為 true:

if(!socket.getKeepAlive()) socket.setKeepAlive(true);

5.8 OOBINLINE 選項(xiàng)

設(shè)置該選項(xiàng): public void setOOBInline(boolean on) throws SocketException  讀取該選項(xiàng): public boolean getOOBInline() throws SocketException //原書中這個方法返回的類型是int  當(dāng) OOBINLINE 為 true 時, 表示支持發(fā)送一個字節(jié)的 TCP 緊急數(shù)據(jù). Socket 類的 sendUrgentData(int data) 方法用于發(fā)送一個字節(jié)的 TCP緊急數(shù)據(jù).

OOBINLINE 的默認(rèn)值為 false, 在這種情況下, 當(dāng)接收方收到緊急數(shù)據(jù)時不作任何處理, 直接將其丟棄. 如果用戶希望發(fā)送緊急數(shù)據(jù), 應(yīng)該把 OOBINLINE 設(shè)為 true:

socket.setOOBInline(true);

此時接收方會把接收到的緊急數(shù)據(jù)

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 科润达机械有限公司| 江苏东邦机械有限公司| 广东南桂起重机械有限公司| 郑州升升机械有限公司| 河南森源重工有限公司| 江苏爱斯特机械有限公司怎么样| 江苏宇达机械有限公司| 威海新元化工机械有限公司| 湘东化工机械有限公司| 东莞正扬电子机械有限公司怎么样 | 中海福陆重工有限公司| 合肥福晟机械制造有限公司| 五莲县机械有限公司| 四川盛和机械设备有限公司| 新乡市起重机有限公司| 福建兴翼机械有限公司| 温州正雄机械有限公司| 常州华机械有限公司| 广州博创机械有限公司| 上海冬松精密机械有限公司| 广州市磊蒙机械设备有限公司| 河南云天起重机械有限公司| 东莞市腾机械有限公司| 常州制药机械有限公司| 杭州萧山鼎立机械有限公司| 新乡市海纳筛分机械制造有限公司| 济宁机械设备有限公司| 宁波华热机械制造有限公司| 浙江中力机械有限公司| 温州正信机械有限公司| 浙江流遍机械润滑有限公司| 台州通宇变速机械有限公司| 范斯特机械有限公司| 上海丰禾精密机械有限公司| 玉环机械制造有限公司| 南阳奇丰机械有限公司| 上海建冶重工机械有限公司| 广州闽欣机械设备有限公司| 广州市善友机械设备有限公司| 上海善能机械有限公司| 无锡全盛安仁机械有限公司| 南安市机械有限公司| 东莞市业佳精密机械有限公司| 武汉泛洲机械制造有限公司| 贝力特机械有限公司| 河南 机械制造有限公司| 大庆机械制造有限公司| 宁波伟隆传动机械有限公司| 苏州包装机械有限公司| 淮南凯盛重工有限公司| 益丰泰机械有限公司| 沈阳水泥机械有限公司| 广州市机械制造有限公司| 江苏凌特精密机械有限公司| 广州包装机械有限公司| 江阴市江南轻工机械有限公司| 青岛雷沃工程机械有限公司| 安阳锻压机械有限公司| 潍坊机械设备有限公司| 安阳新普钢铁有限公司| 浙江恒齿传动机械有限公司| 无锡工源机械有限公司| 哈尔滨工程机械有限公司| 江淮重工机械有限公司| 浙江宏华机械塑胶有限公司| 宁波美亚特精密机械有限公司 | 上海本优机械有限公司| 亿德隆机械有限公司| 合肥方圆机械有限公司| 宁波华美达机械制造有限公司| 东营恒诚机械有限公司| 山东博精化工机械有限公司| 桂林中天机械有限公司| 苏州江源精密机械有限公司| 济南锐捷机械设备有限公司| 宁波工程机械有限公司| 济南 机械 有限公司| 浙江瑞大机械有限公司| 山东钢铁有限公司招聘| 蚌埠神舟机械有限公司| 上海贯博起重设备有限公司| 台湾正河源机械配件有限公司| 东莞市智科精密机械有限公司| 常州天山重工机械有限公司| 浙江国机械有限公司| 上海鼎龙机械有限公司| 常州液压机械有限公司| 芜湖灵芝机械有限公司| 浙江机械制造有限公司| 泰田机械制造有限公司| 深圳机械院建筑设计有限公司| 恒达机械制造有限公司| 烟台金元矿业机械有限公司| 东莞市华森重工有限公司| 扬州鼎隆机械有限公司| 江苏永立机械有限公司| 柳州中源机械有限公司| 长兴诺力机械有限公司| 诸城市美川机械有限公司| 温岭宏业机械有限公司| 济南大彤机械设备有限公司| 常矿起重机械有限公司| 武安市明芳钢铁有限公司| 杭州速博雷尔传动机械有限公司 | 辽宁中冶石化机械有限公司| 浙江保龙机械有限公司| 东莞凯格精密机械有限公司| 佛山陶瓷机械有限公司| 株洲机械制造有限公司| 单县江华机械有限公司| 东莞培锋精密机械有限公司| 徐州华东机械有限公司| 成都富江机械制造有限公司| 河北裕华钢铁有限公司| 宁波塑料机械制造有限公司| 华通动力重工有限公司| 唐山隆鑫机械有限公司| 郑州市鼎盛机械制造有限公司| 重庆华世丹机械制造有限公司| 无锡森本精密机械有限公司| 武汉餐至饮机械设备有限公司| 丹阳龙江钢铁有限公司| 力源液压机械有限公司| 江苏汉鼎机械有限公司| 椿中岛机械有限公司| 天津钢铁销售有限公司| 常州天山重工机械有限公司| 太行机械工业有限公司| 上海盛普机械制造有限公司| 昆山施耐特机械有限公司| 山矿机械设备有限公司| 宁夏瑞光机械有限公司| 深圳新添润彩印机械设备有限公司 | 成都机械设备有限公司| 浙江环兴机械有限公司| 上海熊猫机械有限公司| 河南柴油机重工有限公司| 钦州力顺机械有限公司| 安微博达重工有限公司| 天津大强钢铁有限公司| 三菱重工上海有限公司| 厦门东亚机械有限公司| 北京起重机械有限公司| 江苏中热机械设备有限公司| 安徽泰恒机械制造有限公司| 河北中伟机械有限公司| 无锡械锐机械有限公司| 南京机械制造有限公司| 宁夏天地奔牛银起设备有限公司| 北京加隆工程机械有限公司| 上海纳丰机械设备有限公司| 通力机械制造有限公司| 杭州丽伟电脑机械有限公司| 山东卡特重工有限公司| 焦作泰鑫机械有限公司| 广州博创机械有限公司| 鸡西煤矿机械有限公司| 沈阳机械设备有限公司| 杭州三瑞机械有限公司| 无锡市丰玮机械设备有限公司| 济宁市福瑞得机械有限公司| 天津市华天世纪机械有限公司| 蓬莱大金海洋重工有限公司| 广意永雄机械有限公司| 辽宁营口钢铁有限公司| 徐州成日钢铁有限公司| 常州华威起重工具有限公司| 鑫宏机械制造有限公司| 东莞迅得机械有限公司| 杭州鸿立机械有限公司| 郑州一本机械设备有限公司| 扬州 机械设备 有限公司| 徐州普特工程机械有限公司| 青岛木业机械有限公司| 潍坊浩泰机械有限公司| 南阳东佳机械有限公司| 台州市四海机械有限公司| 深圳市德机械有限公司| 湖北粮食机械有限公司| 浙江红旗机械有限公司| 宁波延晟机械有限公司| 东台市机械有限公司| 永川海通机械有限公司| 汉中群峰机械制造有限公司| 广西柳工机械有限公司| 南京机械电子有限公司| 河南卫华起重机有限公司| 山东冠华重工机械有限公司 | 天盛机械制造有限公司| 河南朝阳钢铁有限公司| 青岛 重工 有限公司| 湖北鄂钢扬子重型机械制造有限公司| 三门峡机械有限公司| 山东华屹重工有限公司| 瑞安市华东包装机械有限公司| 宁波机械制造有限公司| 温州包装机械有限公司| 宁波震德机械制造有限公司| 河南嵩山重工有限公司| 新劲力机械有限公司| 浙江富地机械有限公司| 盐城万富隆机械制造有限公司 | 鞍山机械设备有限公司| 天津市钢铁贸易有限公司| 沈阳黎明机械有限公司| 广州伟乐机械设备有限公司| 浙江歌德起重机有限公司| 深圳新添润彩印机械设备有限公司 | 山东山特重工机械有限公司| 上海纽荷兰农业机械有限公司 | 常矿起重机械有限公司| 创世纪机械有限公司| 宁波信泰机械有限公司| 江苏 机械制造有限公司| 辽阳新达钢铁有限公司| 郑州江河重工有限公司| 台州特特机械有限公司| 广州领新机械实业有限公司| 匹思通机械有限公司| 成都固特机械有限公司| 无锡金比机械有限公司| 青岛金越隆机械有限公司| 吴江聚力机械有限公司| 洛阳重型机械有限公司| 南京竣业过程机械设备有限公司 | 杭州长虹机械有限公司| 新乡市起重机厂有限公司| 宁波裕民机械工业有限公司| 上海宇意机械有限公司| 大连连美机械有限公司| 齐鲁石化机械制造有限公司招聘| 新华机械制造有限公司| 中远海运重工有限公司| 苏州同鑫鸿精密机械有限公司| 上海嘉倍德塑胶机械有限公司 | 昆山胜代机械有限公司招聘| 杭州铁正机械有限公司| 河北大恒重型机械有限公司| 广州泽比机械设备有限公司| 河南万杰食品机械有限公司| 上海熊猫机械有限公司| 肥城云宇机械有限公司| 晋城福盛钢铁有限公司| 河南瑞峰机械有限公司| 上海好机械有限公司| 诸城市恒顺机械有限公司| 河北兴华钢铁有限公司| 泉州佳升机械有限公司| 哈尔滨恒力达机械有限公司| 山东起重机有限公司| 重庆阿德耐特动力机械有限公司| 浙江炬达机械有限公司| 桂林科丰机械有限公司| 钢铁国际贸易有限公司| 瑞德森机械有限公司| 山东讴神机械制造有限公司| 深圳市德润机械有限公司| 禹州市机械有限公司| 龙工江西机械有限公司| 安徽中晨机械有限公司| 起重机械制造有限公司| 大连铸鸿机械有限公司| 科倍隆南京机械有限公司| 杭州食品机械有限公司| 哈尔滨恒力达机械有限公司| 台州特特机械有限公司| 浙江天泰机械有限公司| 苏州立注机械有限公司| 浙江佶龙机械有限公司| 慈溪市宏晟机械设备有限公司| 温州天马食品包装机械制造有限公司| 佛山玻璃机械有限公司| 上海国青机械有限公司| 杭州驰耐传动机械有限公司| 上海铁杉机械有限公司| 深圳精机械有限公司| 苏福马机械有限公司| 宁波塑料机械制造有限公司| 江苏江佳机械有限公司| 大方起重机器有限公司| 东风悦达起亚汽车有限公司| 唐山国义特种钢铁有限公司| 保东农业机械有限公司| 广州万举机械有限公司| 约翰迪尔佳木斯农业机械有限公司| 江阴铸造机械有限公司| 爱克苏州机械有限公司| 山东岳工机械有限公司| 襄阳东昇机械有限公司| 上海精密机械有限公司| 浙江矿山机械有限公司| 华天机械制造有限公司| 特雷克斯常州机械有限公司| 北京骏马机械有限公司| 江苏先电机械有限公司| 江苏新技机械有限公司| 兰州机械设备有限公司| 豫工机械设备有限公司| 山东港中钢铁有限公司| 浙江新德宝机械有限公司| 开封茂盛机械有限公司| 四川高龙机械有限公司| 合肥永升机械有限公司| 湖州机械制造有限公司| 安徽 机械设备有限公司| 厦门东亚机械有限公司| 北京机械设备租赁有限公司| 昆明 机械 有限公司| 宏兴钢铁有限公司官网| 泰兴市立君机械设备有限公司| 瑞 机械有限公司| 南通苏诺特包装机械有限公司| 蓬莱巨涛海洋工程重工有限公司怎么样 | 苏州华致鑫精密机械有限公司| 昌邑市机械有限公司| 邹平 机械有限公司| 青岛液压机械有限公司| 厦门 机械有限公司| 佛山精密机械有限公司| 青州市国发包装机械有限公司 | 日发纺织机械有限公司| 河南重工机械有限公司| 苏州伟鼎机械设备有限公司| 开封元创机械有限公司| 河南真牛起重机有限公司| 上海包装机械有限公司| 福建省 机械有限公司| 杭州机械设备有限公司| 临沂市机械有限公司| 温州华印机械有限公司| 合肥中通抛光机械有限公司| 上海一达机械有限公司| 哈尔滨机械设备有限公司| 济宁市兴旺机械制造有限公司 | 山东大佳机械有限公司| 台湾鸿昌机械有限公司| 上海昱音机械有限公司| 山东机械铸造有限公司| 烟台金元矿业机械有限公司| 四川机械设备有限公司| 成都 机械 有限公司| 山东鲁新起重设备有限公司| 德瑞机械设备有限公司| 宁波海江机械制造有限公司| 安徽金锡机械有限公司| 上海橡塑机械有限公司| 艾沃意特机械设备制造有限公司| 德莱赛机械苏州有限公司| 广州市佳速精密机械有限公司| 重庆起重机厂有限公司| 广西千里通机械设备有限公司| 汕头市包装机械有限公司| 滦南华瑞钢铁有限公司| 和和机械(张家港)有限公司| 安丰钢铁有限公司电话| 无锡伊诺特石化机械设备有限公司 | 上海宝锻机械制造有限公司| 浙江阜康机械有限公司| 开封市茂盛粮食机械有限公司 | 广东机械制造有限公司| 元机械制造有限公司| 江苏卫东机械有限公司| 江苏隆达机械设备有限公司| 石家庄钢铁有限公司| 浙江歌德起重机有限公司| 诸城市安泰机械有限公司| 骁马机械上海有限公司| 淄博协丰机械有限公司| 安特精密机械有限公司| 东莞市柯达机械有限公司| 浙江纺织机械有限公司| 宁波天辉机械有限公司| 上海应晓食品机械有限公司| 杭州精工机械有限公司| 杭州双龙机械有限公司| 常州市良久机械制造有限公司| 山东高机工业机械有限公司| 河北德林机械有限公司| 杭州灵达机械有限公司| 河北机械进出口有限公司| 扬州精辉试验机械有限公司 | 泉州市力达机械有限公司 | 广州 机械有限公司| 山东碧海机械有限公司| 金田豪迈木业机械有限公司| 机械设备工程有限公司| 洛阳中德重工有限公司| 江苏巨威机械有限公司| 宁波奇精机械有限公司| 襄阳亚舟重型工程机械有限公司| 市瑞港机械有限公司| 建筑机械设备有限公司| 永宏机械制造有限公司| 潍坊元鸣机械有限公司| 湖南龙凤机械制造有限公司| 工程机械销售有限公司| 洛阳隆中重工机械有限公司| 浙江博创机械有限公司| 上海集美食品机械有限公司 | 河北政博机械制造有限公司| 嘉兴 精密机械有限公司| 上海中造机械有限公司| 中核华兴达丰机械工程有限公司 | 河南省机械有限公司| 山东鲁工机械有限公司| 武汉吕工机械有限公司| 临沂盛德机械有限公司| 临沂铸信机械有限公司| 佛山定中机械有限公司| 东莞市包装机械有限公司| 宁波博大机械有限公司| 广东新船重工有限公司| 江苏炬峰机械有限公司| 江苏华夏重工有限公司| 山东泗水泰峰面粉机械有限公司| 重庆阿德耐特动力机械有限公司| 溧阳市机械有限公司| 富阳 机械有限公司| 浙江流遍机械润滑有限公司| 长沙精密机械有限公司| 北京食之秀机械设备有限公司| 江苏同正机械制造有限公司| 青岛德固特机械制造有限公司| 浏阳 机械有限公司| 机械电子制造有限公司| 无纺布机械有限公司| 宁波天竺工程机械有限公司| 重庆培柴机械制造有限公司| 苏州恒迈精密机械有限公司| 威海威力起重有限公司| 余姚市机械有限公司| 合肥华运机械有限公司| 上海竹达机械设备有限公司| 重庆江峰机械有限公司| 佛山市创宝包装机械有限公司| 焦作市虹起制动器有限公司| 常州斯太尔动力机械有限公司| 海门亿峰机械有限公司| 长沙昊博机械设备有限公司 | 深圳新劲力机械有限公司| 宁波华强机械有限公司| 上海机械施工有限公司| 上海传动机械有限公司| 河南广泰机械有限公司| 深圳新劲力机械有限公司| 西帕机械杭州有限公司| 上海齐耀螺杆机械有限公司| 天津市华天世纪机械有限公司| 唐山宏润钢铁有限公司| 华宝机械制造有限公司| 青岛一津机械有限公司| 华泰精密机械有限公司| 云南旷迪机械有限公司| 上海昊农农业机械有限公司 | 中农丰茂植保机械有限公司 | 娄底 机械有限公司| 成都恒飞机械有限公司| 德枫丹青岛机械有限公司招聘| 韩通船舶重工有限公司| 柳工常州机械有限公司| 青岛唐宇机械制造有限公司| 联征机械设备有限公司| 上海 输送机械有限公司| 航星洗涤机械(泰州)有限公司| 化工机械制造有限公司| 杭州纺织机械有限公司| 济南赛信机械有限公司| 苏州传动机械有限公司| 上海东蒙路桥机械有限公司 | 合肥 机械有限公司| 山东日发纺织机械有限公司| 南京康尼精密机械有限公司| 宁波钢铁有限公司地址| 北京印刷机械有限公司| 苏州 机械 有限公司| 中阳钢铁有限公司官网| 温州市友田包装机械有限公司 | 嘉善远景机械有限公司| 常州达德机械有限公司| 玉溪新兴钢铁有限公司| 机械有限公司 招聘| 上海起泽起重机械有限公司| 唐山东方钢铁有限公司| 江苏正合重工有限公司| 贵州凯星液力传动机械有限公司| 东莞启益电器机械有限公司 | 江苏特佳机械有限公司| 阿尔法起重机有限公司| 苏州奥达机械部件有限公司| 协展机械工业有限公司| 温州设备机械有限公司| 青岛沃隆花生机械有限公司| 山东锦坤机械有限公司| 沂水阳东机械有限公司| 上海 机械设备有限公司| 郑州年旭机械有限公司| 东莞市宝腾机械有限公司| 南通昭和机械有限公司| 海之力机械有限公司| 台在机械设备有限公司| 广州科光机械有限公司| 河北荣信钢铁有限公司| 河南卫华起重机有限公司| 石家庄 机械 有限公司| 青州康达机械有限公司| 上海御流包装机械有限公司| 上海尼尔机械制造有限公司| 昆山市贝纳特机械设备有限公司| 安徽同铸工程机械有限公司| 锋劲威机械有限公司| 昆山环保机械有限公司| 山东旭升机械有限公司| 东莞恒力机械有限公司| 新乡市长城机械制造有限公司| 襄阳博亚机械有限公司| 成都瑞迪机械实业有限公司| 嘉兴机械设备有限公司| 合肥二宫机械有限公司| 常州市良久机械制造有限公司| 北京机械设备有限公司| 湖南金塔机械制造有限公司| 深圳液压机械有限公司| 苏州盛友机械有限公司| 上海固好包装机械有限公司| 广东三浦重工有限公司| 东莞市亚龙玻璃机械有限公司| 华天机械制造有限公司| 山东 重工有限公司| 江西中天机械有限公司| 川崎精密机械苏州有限公司| 杭州海的机械有限公司| 东莞市台钢机械设备有限公司 | 永安五金机械有限公司| 靖江机械制造有限公司| 天津中核机械有限公司| 郑州市同鼎机械设备有限公司 | 江苏优远机械有限公司| 唐山 机械设备有限公司| 辽宁天一重工有限公司| 潍坊新成达机械有限公司| 上海精密机械制造有限公司| 山东泰瑞汽车机械电器有限公司| 东莞市凯格精密机械有限公司| 北京航天振邦精密机械有限公司| 河北天冠环保机械有限公司| 南京欧能机械有限公司| 西安工程机械有限公司| 泰安华伟重工有限公司| 杭州杭重机械有限公司| 重型机械设备有限公司| 河南起重设备有限公司| 吴江精密机械有限公司| 扬州东进机械有限公司| 合肥中通抛光机械有限公司| 福州协展机械有限公司| 沈阳六合机械有限公司| 泰田液压机械有限公司| 昆山硕杰机械有限公司| 养殖有限公司起名大全| 上海依澳包装机械有限公司| 三一工程机械有限公司| 山东岳峰起重机械有限公司| 河南龙昌机械有限公司| 潍坊圣旋机械有限公司| 江苏江佳机械有限公司| 天津金都钢铁有限公司| 上海景林包装机械有限公司| 杭州力泰起重机械有限公司 | 昆山乔地精密机械有限公司| 青岛华鑫克斯顿机械有限公司 | 嵊州市龙威机械制造有限公司| 上海昱钢包装机械有限公司| 兰州兴元钢铁有限公司| 厦门机械制造有限公司| 北京道森起点信息技术有限公司 | 苏州鸿本机械制造有限公司| 上海舒平精工机械有限公司| 江西九江萍钢钢铁有限公司| 广州易鸿机械有限公司| 常州浦发机械有限公司| 杭州天恒机械有限公司| 河南钢铁贸易有限公司| 北京大铭世进机械设备有限公司 | 江苏中科机械有限公司| 西安柳工机械有限公司| 河北昭达机械有限公司| 浙江胜祥机械有限公司| 中海福陆重工有限公司| 小松山推工程机械有限公司| 徐州 机械制造有限公司| 集瑞联合重工有限公司| 杭州长虹机械有限公司| 唐山佳鑫机械配件有限公司| 上海申越包装机械制造有限公司| 江苏诺森重工有限公司| 章丘宇龙机械有限公司| 青州泰达机械有限公司| 吉林小松工程机械有限公司| 宁波博日机械有限公司| 山西重工机械有限公司| 东莞住重塑胶机械有限公司| 佛山机械制造有限公司| 宝鸡石油机械有限公司| 佛山市中牌机械有限公司| 张家港市机械有限公司| 杭州方圆塑料机械有限公司| 四川凌峰航空液压机械有限公司| 浙江工程机械有限公司| 顺昌机械制造有限公司| 河北水利机械有限公司| 北京大起空调有限公司| 合肥机械设备有限公司| 南通福斯特机械制造有限公司| 江苏竣业过程机械设备有限公司| 潍坊竣通机械配套有限公司| 河南一重起重机有限公司| 南通苏诺特包装机械有限公司| 宁波汉博机械有限公司| 宁波江北机械有限公司| 新源重工机械有限公司| 杭州泰尚机械有限公司| 广州市通风机械设备有限公司| 江阴凯澄起重机械有限公司| 海狮洗涤机械有限公司| 茂名重力石化机械制造有限公司 | 上海派协包装机械有限公司| 苏州腾龙机械有限公司| 常州步速者机械制造有限公司| 上海塑胶机械有限公司| 福州恒拓机械有限公司| 重庆工程机械有限公司| 浙江山海机械有限公司| 保定华光机械有限公司| 成都的起重有限公司| 中联恒通机械有限公司| 无锡聚英机械有限公司| 南通天成机械有限公司| 东莞木工机械有限公司| 恒联食品机械有限公司| 济宁福康机械加工有限公司| 天津机械配件有限公司| 河北雪龙机械制造有限公司| 天津京龙工程机械有限公司| 南海区机械设备有限公司| 临海正大机械有限公司| 东莞市通盛机械有限公司| 重庆阿德耐特动力机械有限公司| 马鞍山钢铁有限公司| 南通恒力重工机械有限公司| 辽阳喜旺机械制造有限公司| 宁波星峰机械有限公司| 绍兴金昊机械制造有限公司| 瀚乐电子机械有限公司| 湘潭 机械制造有限公司| 上海鸿尔机械有限公司| 郑州维科重工机械有限公司| 上海亚华印刷机械有限公司 | 湖州惠盛机械有限公司| 临沂华立机械有限公司| 广州汇亿机械有限公司| 海的动力机械有限公司| 山东机械铸造有限公司| 唐盛国际机械有限公司| 黄石永辉机械有限公司| 昆山日日先精密机械有限公司 | 建筑工程有限公司起名| 江苏船谷重工有限公司| 杭州神钢建设机械有限公司| 江苏桂铭机械有限公司| 扬州金威机械有限公司| 化工有限公司起名大全| 山西机械设备有限公司| 曲阜润丰机械有限公司| 烟台微特机械有限公司| 无锡创能机械制造有限公司| 佛山市劲雄机械有限公司| 威士重工机械有限公司| 福建机械设备有限公司| 济南 机械 有限公司| 盐城石油机械有限公司| 扬州巨人机械有限公司| 江阴机械制造有限公司| 江苏恒械机械有限公司| 重庆江峰机械有限公司| 机械有限公司 张家港| 沙钢永兴钢铁有限公司| 长沙益广制药机械有限公司| 温州华推机械有限公司| 宁波达峰机械有限公司| 山东明美数控机械有限公司| 东莞市益彩机械有限公司| 上海丰泽机械有限公司| 苏州联佳精密机械有限公司| 永达机械制造有限公司| 佳友精密机械有限公司| 上海钢铁物资有限公司| 常州宏机械有限公司| 广州领新机械实业有限公司| 宁波天竺工程机械有限公司| 宇进注塑机械有限公司| 朗维纺织机械有限公司| 佛山包装机械有限公司| 中船华南船舶机械有限公司| 盐城丰炜机械制造有限公司| 江苏柯恒石化电力机械有限公司 | 襄阳通威机械有限公司| 沃洲机械制造有限公司| 潍坊圣旋机械有限公司| 恒瑞机械制造有限公司| 昆山博通机械设备有限公司| 台州瑞达机械有限公司| 宁波液压机械有限公司| 安徽远鸿机械自动化有限公司| 大连铸鸿机械有限公司| 万则盛机械有限公司| 常州武进机械有限公司| 西帕机械杭州有限公司| 佛山市松川包装机械有限公司| 天津钢铁销售有限公司| 济宁通佳机械有限公司| 财益机械工业有限公司| 上海祎飞机械有限公司| 宏鑫机械设备有限公司| 东莞市日东超声波机械有限公司| 诸城市华邦机械有限公司| 江阴科盛机械有限公司| 山东大华机械有限公司| 成都蓉诚机械设备有限公司| 荆州祥达机械制造有限公司| 永宏机械制造有限公司| 新乡市长城机械有限公司| 重庆辉昌机械设备有限公司| 常州市豪乐机械有限公司| 无锡威马机械有限公司| 资阳 机械有限公司| 南京贝隆齐机械有限公司| 郑州江科重工机械有限公司| 上海成套机械有限公司| 东莞市利成机械有限公司| 永胜机械工业有限公司| 合肥二宫机械有限公司| 青岛德盛机械制造有限公司| 无锡英那威特机械发展有限公司 | 小森机械南通有限公司| 三一起重机械有限公司| 新兴重工天津国际贸易有限公司| 河北新钢钢铁有限公司| 山东博杰重型工程机械有限公司 | 河南新起点印务有限公司| 东莞大兴发机械有限公司| 江阴派格机械设备有限公司| 同鼎机械设备有限公司| 机械设备有限公司官网| 上海凌鹰机械有限公司| 山东泰瑞汽车机械电器有限公司 | 徐州二川机械有限公司| 财益机械工业有限公司| 东莞机械设备有限公司| 常州市瑞州机械有限公司| 江阴市华科机械设备有限公司 | 宝鸡市机械有限公司| 台一精工机械有限公司| 江苏江阴机械有限公司| 郑州华龙机械工程有限公司| 苏州市机械制造有限公司| 南京华勒机械有限公司| 马鞍山 重工机械有限公司| 柳州商泰机械有限公司| 东莞巨冈机械有限公司| 山东 纺织机械 有限公司| 贵州力顺机械有限公司| 山西太行钢铁有限公司| 上海 乐 机械有限公司| 江苏源德机械有限公司| 登福机械(上海)有限公司| 北京机械设备制造有限公司| 湖州惠盛机械有限公司| 大连宏大连杆机械制造有限公司| 苏州洁宝机械有限公司| 苏州联又机械有限公司| 台州启运机械有限公司| 浙江新立机械有限公司| 汇大机械制造有限公司| 青岛义龙包装机械有限公司| 温州中环机械设备有限公司 | 广州东升机械有限公司| 厦门国桥机械有限公司| 河南良益机械有限公司| 常州常矿起重机械有限公司| 常州豪凯机械有限公司| 河北常富机械有限公司| 北京机械设备租赁有限公司| 山东永弘机械有限公司| 泉州得力农林机械有限公司| 源通机械设备有限公司| 天津敏信机械有限公司| 宿迁百通机械有限公司| 无锡永兴机械制造有限公司| 南通武藏精密机械有限公司招聘 | 宁波力盟机械有限公司| 吉林大华机械制造有限公司| 上海长江服装机械有限公司| 汕头机械厂有限公司| 苏州威邦自动化机械有限公司| 成都经纬机械制造有限公司| 烟台瑞进精密机械有限公司| 中山市包装机械有限公司 | 江阴市江南轻工机械有限公司| 宝钢盐城钢铁有限公司| 北京恒机械设备有限公司| 苏州奥德机械有限公司| 固耐重工苏州有限公司| 沈阳水泥机械有限公司| 湖北三六重工有限公司| 昆山烽禾升精密机械有限公司| 鑫泰数控机械有限公司| 长沙起重机厂有限公司| 海宁美惠机械有限公司| 上海优拜机械有限公司| 上海金纬机械有限公司| 江西中天机械有限公司| 瑞鼎精密机械有限公司| 山西立恒钢铁有限公司| 伊之密机械有限公司| 旭众食品机械有限公司| 河北燕兴机械有限公司| 泰州市机械制造有限公司| 重庆海松机械有限公司| 温州韦盛机械有限公司| 河北昭达机械有限公司| 湖南金牛重工机械有限公司| 广东食品机械有限公司| 鸿达机械设备有限公司| 京雕精密机械有限公司| 济宁福康机械加工有限公司| 佛山市宝索机械制造有限公司| 无锡盛达机械制造有限公司| 山西建龙钢铁有限公司地址| 南京工程机械有限公司| 沈阳西城钢铁有限公司| 浙江长泰机械有限公司| 苏州金纬机械制造有限公司| 山东济宁机械有限公司| 新疆起亚铝业有限公司招聘| 唐山凯恒钢铁有限公司| 福建瑜鼎机械有限公司| 广东川德机械有限公司| 苏州苏安起重吊装有限公司| 温州锐光机械有限公司| 浙江科尔博机械有限公司| 山东明威起重设备有限公司| 保定向阳航空精密机械有限公司| 安徽 机械制造有限公司| 宁波巨隆机械有限公司| 九龙机械制造有限公司| 东莞市全永机械制造有限公司| 德林机械制造有限公司| 河北水利机械有限公司| 浙江锦峰纺织机械有限公司| 宝鸡忠诚制药机械有限公司| 郑州鼎盛机械设备有限公司 | 苏州腾龙机械有限公司| 河南省矿山起重机制造有限公司| 重庆远风机械有限公司| 重庆明华机械有限公司| 温州华印机械有限公司| 昆山胜代机械有限公司| 特雷克斯常州机械有限公司| 盐城液压机械有限公司| 江苏桂铭机械有限公司| 徐州挖掘机械有限公司| 保定东利机械制造有限公司| 人科机械设备有限公司| 普惠环保机械有限公司| 唐山机械制造有限公司| 上海唐迪机械制造有限公司| 农友机械设备有限公司| 东莞正扬电子机械有限公司| 国发重工机械有限公司| 上海春田机械有限公司| 天津江天重工有限公司| 上海中机械有限公司| 温州 机械有限公司| 中山市机械设备有限公司| 芜湖仅一机械有限公司| 天津市钢铁有限公司| 湖北机械设备有限公司| 安徽鸿泰钢铁有限公司| 河南东盈机械设备有限公司| 江阴兴澄特种钢铁有限公司地址| 恒瑞机械制造有限公司| 天津宏大纺织机械有限公司| 上海盾克机械有限公司| 无锡市丰玮机械设备有限公司 | 江 诚机械有限公司| 上海利昆机械有限公司| 上海昶旭包装机械有限公司| 成都欧曼机械有限公司| 郑州中嘉重工有限公司| 武汉鑫金泽机械有限公司| 四平方向机械有限公司| 河北展利机械有限公司| 佛山丰堡精密机械有限公司| 台州欧玮机械有限公司| 浙江昌亨机械有限公司| 新晨动力机械有限公司| 六安恒源机械有限公司| 江苏金韦尔机械有限公司| 大连橡胶塑料机械有限公司 | 江苏船谷重工有限公司| 苏州机械制造有限公司| 扬州沃尔特机械有限公司| 天津百利二通机械有限公司| 石油机械设备有限公司| 济南明美机械有限公司| 临沂金立机械有限公司| 山东机械铸造有限公司| 温州 轻工机械有限公司| 浙江南山传动机械有限公司| 永宏机械制造有限公司| 合肥大洋机械制造有限公司| 大连船舶重工船业有限公司| 青岛美克精密机械有限公司| 济南光先数控机械有限公司| 山东纺织机械有限公司| 扬州恒佳机械有限公司| 常熟机械制造有限公司| 五洋纺织机械有限公司| 欧力特机械有限公司| 福建申达钢铁有限公司| 永华机械有限公司招聘| 河北机械制造有限公司| 天门仙粮机械有限公司| 上海塑料机械有限公司| 盐城联鑫钢铁有限公司| 河北华西钢铁有限公司| 杭州 机械设备有限公司| 上海昱钢包装机械有限公司| 宁波奇精机械有限公司| 石家庄煤矿机械有限公司| 广东乐善机械有限公司| 温州利波机械有限公司| 石油机械制造有限公司| 江苏力源液压机械有限公司| 上海松川远亿机械设备有限公司| 南京宏伟屠宰机械制造有限公司| 海宁美惠机械有限公司| 东莞市大机械有限公司| 玛连尼 法亚机械有限公司| 深圳机械设备有限公司| 石嘴山钢铁有限公司| 中核机械天津有限公司| 远洋翔瑞机械有限公司| 江苏舜工机械有限公司| 江苏省机械有限公司| 徐州东南钢铁工业有限公司| 启东丰顺重工有限公司| 无锡锡科机械制造有限公司| 淄博翔鹏机械有限公司| 青岛 机械制造有限公司| 硕方精密机械有限公司| 青岛昌源隆纺织机械有限公司| 农业机械装备有限公司| 太行机械工业有限公司| 苏州华尔普机械有限公司| 福建烟草机械有限公司| 温州海翔机械有限公司| 武汉机械工程有限公司| 三友重工机械有限公司| 上海大松机械有限公司| 南京化工机械有限公司| 浙江君鸿机械有限公司| 昆明机械设备有限公司| 徐州永欣重工有限公司| 上海德元机械设备有限公司| 创宝包装机械有限公司| 德瑞机械设备有限公司| 河南万合机械有限公司| 张家口煤矿机械制造有限公司| 上海众星洗涤机械制造有限公司| 台州瑞进机械有限公司| 徐州丰展机械有限公司| 新鹏辉钢铁有限公司| 蓬莱禄昊化工机械有限公司| 上海满鑫机械有限公司| 南京腾阳机械有限公司| 常州小松工程机械有限公司招聘| 深圳市机械有限公司| 抚顺起亮食品有限公司| 大连起重机有限公司| 东莞培锋精密机械有限公司| 内蒙古机械有限公司| 特斯克机械有限公司| 山东重机械有限公司| 济南北斗星机械设备有限公司 | 洛阳大华重型机械有限公司| 诸城市万兴机械有限公司| 河南东盈机械设备有限公司 | 蚌埠液力机械有限公司|