java socket参数详解:OOBInline和UrgentData .
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我应该做的更差吗?
- 下一篇: 2011-07-04 22:11 Jfr