TCP的紧急指针,一般都不建议使用,而且不同的TCP/IP实现,也不同,一般说如果你有紧急数据宁愿再建立一个新的TCP/IP连接发送数据,让对方紧急处理。但是,虽然sendUrgentData的参数data是int类型,但只有这个int类型的低字节被发送,其它的三个字节被忽略。下面的代码演示了如何使用SO_OOBINLINE选项来发送单字节数据。

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); // 向服务器发送字符"C"
outWriter.write("hello world\r\n");
socket.sendUrgentData(65); // 向服务器发送字符"A"
socket.sendUrgentData(322); // 向服务器发送字符"B"
outWriter.flush();
socket.sendUrgentData(214); // 向服务器发送汉字”中”
socket.sendUrgentData(208);
socket.sendUrgentData(185); // 向服务器发送汉字”国”
socket.sendUrgentData(250);
socket.close();
}
}
class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(1234);
System.out.println("服务器已经启动,端口号: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();
}
}
}

结果:
服务器已经启动,端口号:1234
ABChello world
中国


从图上可以看出,虽然322分布在了两个字节上,但它的低字节仍然是66。
在Client类中使用flush将缓冲区中的数据发送到服务器。我们可以从输出结果发现一个问题,在Client类中先后向服务器发送了'C'、"hello world"r"n"、'A'、'B'。而在服务端程序的控制台上显示的却是ABChello world。这种现象说明使用sendUrgentData方法发送数据后,系统会立即将这些数据发送出去;而使用write发送数据,必须要使用flush方法才会真正发送数据。
在Client类中向服务器发送"中国"字符串。由于"中"是由214和208两个字节组成的;而"国"是由185和250两个字节组成的;因此,可分别发送这四个字节来传送"中国"字符串。
注意:在使用setOOBInline方法打开SO_OOBINLINE选项时要注意是必须在客户端和服务端程序同时使用setOOBInline方法打开这个选项,否则无法命名用sendUrgentData来发送数据

java socket参数详解:OOBInline和UrgentData .相关推荐

  1. Java Socket 参数详解

    Java socket参数选项: TCP_NODELAY:  表示立即发送数据 SO_RESUSEADDR:  表示是否允许重用socket所绑定的本地地址 SO_TIMEOUT :  表示接收数据时 ...

  2. java ext.dirs_关于-Djava.ext.dirs使用及JAVA 命令参数详解System.setProperty

    大家在linux环境下使用命令行执行java程序时,经常要使用到大量外部的jar包或class文件,一般我们有哪些方式可以用呢? -classpath,命令格式:# java -classpath , ...

  3. Java Socket编程详解

    Java Socket编程是Java网络编程很重要的内容,现参考了许多资料,总结如下: 1. Java网络编程原理+Socket编程 http://www.cnblogs.com/linzheng/a ...

  4. java backlog满_java socket参数详解:BackLog

    输入连接指示(对连接的请求)的最大队列长度被设置为 backlog 参数.如果队列满时收到连接指示,则拒绝该连接. 注意: 1. backlog参数必须是大于 0 的正值.如果传递的值等于或小于 0, ...

  5. 【Netty】option(ChannelOption.SO_KEEPALIVE, true) socket参数详解:KeepAlive

    .childOption(ChannelOption.SO_KEEPALIVE, true); childOption是用来给父级ServerChannel之下的Channels设置参数的 当设置为t ...

  6. java虚拟机参数详解

    Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOME\bin\java –option 来启动,-option为虚拟机参数,JAVA_H ...

  7. java 可变参数 详解(通俗易懂)

    目录 一.概述: 二.格式: 三.注意事项(使用规范): 四.代码演示: 演示规范①~③: 演示规范④: 演示规范⑤: 课堂练习: 代码演示: 输出结果: 五.英文版本讲解: 一.概述: java中, ...

  8. Java运行参数详解

    JRE版本 admindeMacBook-Pro:~ admin$ java -version java version "1.8.0_111" Java(TM) SE Runti ...

  9. java命令行参数详解

    java 命令参数详解_赶路人儿的博客-CSDN博客_java命令行参数java命令用于启动 java 应用:它首先会启动 java 运行时环境(JRE),然后加载指定的类,调用类的main()方法. ...

最新文章

  1. LOJ2586 APIO2018 选圆圈
  2. OpenStack icehouse系列之计算节点搭建
  3. Build Roads
  4. Java并发编程面试题(2020最新版)
  5. std::chrono::duration_cast时间计算
  6. kali里PHP文件502错误,解决Linux Kali iptables开放22端口失败等一系列问题
  7. json日期格式问题的办法
  8. 信息图:iOS 7开发者需要知道的事
  9. /etc/apt/sources.list.d/ros-latest.list' permission denied
  10. Visual Studio 2015 移动跨平台开发初体验
  11. Confluence 会议记录(Meeting Notes)蓝图
  12. linux连接苹果鼠标,Linux 5.13添加对苹果Magic Mouse 2和微软SAM的支持
  13. typedef的4种常见用法
  14. 操作系统-进程管理(信号量机制)
  15. python程序自动运行_定时后台运行Python程序
  16. openGL增强表面细节--凹凸贴图具体实现
  17. P2132 小Z的队伍排列-杨氏矩阵与hook定理
  18. matlab解方程、方程组
  19. python 有损和无损 方式替换表情符号
  20. ES6数组去重的方法

热门文章

  1. 基于FPGA的异构计算在多媒体中的应用
  2. 一个即将写入MySQL源码的官方bug解决之路
  3. 万字长文带你深入浅出 Golang Runtime
  4. 还在用 Win?教你从零把 Mac 打造成开发利器
  5. SRS提供的librtmp
  6. NoSQL分类及常用软件
  7. zookeeper安装包下载地址
  8. 看完你就晓得正向代理和反向代理了!
  9. RunJar是什么进程?
  10. 【MySQL数据库】一天学完MySQL笔记——纯SQL文档版