日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java socket参数详解:OOBInline和UrgentData .

發(fā)布時(shí)間:2024/1/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket参数详解:OOBInline和UrgentData . 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
TCP的緊急指針,一般都不建議使用,而且不同的TCP/IP實(shí)現(xiàn),也不同,一般說如果你有緊急數(shù)據(jù)寧愿再建立一個(gè)新的TCP/IP連接發(fā)送數(shù)據(jù),讓對方緊急處理。但是,雖然sendUrgentData的參數(shù)data是int類型,但只有這個(gè)int類型的低字節(jié)被發(fā)送,其它的三個(gè)字節(jié)被忽略。下面的代碼演示了如何使用SO_OOBINLINE選項(xiàng)來發(fā)送單字節(jié)數(shù)據(jù)。
package socket;import java.io.*; import java.net.*;import org.apache.log4j.Logger;public class Test_OOBInline {private static Logger logger = Logger.getLogger(Test_OOBInline.class);public static void main(String[] args) throws UnknownHostException, IOException {Socket socket = new Socket("127.0.0.1", 1234);socket.setOOBInline(true);OutputStream out = socket.getOutputStream();OutputStreamWriter outWriter = new OutputStreamWriter(out);outWriter.write(67); // 向服務(wù)器發(fā)送字符"C"outWriter.write("hello world\r\n");socket.sendUrgentData(65); // 向服務(wù)器發(fā)送字符"A"socket.sendUrgentData(322); // 向服務(wù)器發(fā)送字符"B"outWriter.flush();socket.sendUrgentData(214); // 向服務(wù)器發(fā)送漢字”中”socket.sendUrgentData(208);socket.sendUrgentData(185); // 向服務(wù)器發(fā)送漢字”國”socket.sendUrgentData(250);socket.close();} }class Server {public static void main(String[] args) throws Exception {ServerSocket serverSocket = new ServerSocket(1234);System.out.println("服務(wù)器已經(jīng)啟動(dòng),端口號:1234");while (true) {Socket socket = serverSocket.accept();socket.setOOBInline(true);InputStream in = socket.getInputStream();InputStreamReader inReader = new InputStreamReader(in);BufferedReader bReader = new BufferedReader(inReader);System.out.println(bReader.readLine());System.out.println(bReader.readLine());socket.close();}} }

結(jié)果:
服務(wù)器已經(jīng)啟動(dòng),端口號:1234
ABChello world
中國


從圖上可以看出,雖然322分布在了兩個(gè)字節(jié)上,但它的低字節(jié)仍然是66。
在Client類中使用flush將緩沖區(qū)中的數(shù)據(jù)發(fā)送到服務(wù)器。我們可以從輸出結(jié)果發(fā)現(xiàn)一個(gè)問題,在Client類中先后向服務(wù)器發(fā)送了'C'、"hello world"r"n"、'A'、'B'。而在服務(wù)端程序的控制臺上顯示的卻是ABChello world。這種現(xiàn)象說明使用sendUrgentData方法發(fā)送數(shù)據(jù)后,系統(tǒng)會(huì)立即將這些數(shù)據(jù)發(fā)送出去;而使用write發(fā)送數(shù)據(jù),必須要使用flush方法才會(huì)真正發(fā)送數(shù)據(jù)。
在Client類中向服務(wù)器發(fā)送"中國"字符串。由于"中"是由214和208兩個(gè)字節(jié)組成的;而"國"是由185和250兩個(gè)字節(jié)組成的;因此,可分別發(fā)送這四個(gè)字節(jié)來傳送"中國"字符串。
注意:在使用setOOBInline方法打開SO_OOBINLINE選項(xiàng)時(shí)要注意是必須在客戶端和服務(wù)端程序同時(shí)使用setOOBInline方法打開這個(gè)選項(xiàng),否則無法命名用sendUrgentData來發(fā)送數(shù)據(jù)

總結(jié)

以上是生活随笔為你收集整理的java socket参数详解:OOBInline和UrgentData .的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。