文章目录

  • I ServerSocket 端口号绑定参数
  • II ServerSocket 复用绑定端口设置
  • III ServerSocket 设置缓冲区大小
  • IV ServerSocket 设置超时时间
  • V ServerSocket 设置性能参数

I ServerSocket 端口号绑定参数


1. 建议绑定时机 : 绑定端口号的操作建议在设置的最后一步进行操作 , 如果绑定了端口号 , 很多设置就无效了 ;

2. int backlog 参数作用 : 创建 ServerSocket 对象之后 , 需要绑定本地的 IP 地址和端口号 , 服务器套接字绑定方法还有一个 int backlog 参数 , 这个参数指的是允许等待的连接队列 , 如将该值设置成 10 的效果是 , 当客户端连接服务器 , 但是服务器还没有调用 accept 方法接收客户端的连接 , 此时如果有 10 个以内的客户端连接 , 这 10 个连接都在缓冲区中等待 , 如果出现第 11 个客户端连接 , 此时客户端就会抛出异常 ; 注意这个异常是在客户端触发的 ;

//服务器端绑定本地的 IP 地址和端口号
serverSocket.bind(new InetSocketAddress(Inet4Address.getLocalHost(), 8888), 10);

II ServerSocket 复用绑定端口设置


设置是否可以复用 ServerSocket 绑定的地址和端口号 : setReuseAddress( true ) ;

serverSocket.setReuseAddress(true);

Socket 连接在建立时 , 会使用之前绑定本地的 IP 地址和端口号 , 这个端口号在使用之后 , 2 分钟之内不允许再次使用 ; 进行了该设置之后 , 可以在连接关闭之后 , 马上使用该本地 IP 地址和端口号 ;

III ServerSocket 设置缓冲区大小


1. 缓冲区大小设置 : ServerSocket 只有接收缓冲区设置 , 其原理与 Socket 缓冲区原理相同 ;

  • ① 接收缓冲区设置 ;
serverSocket.setReceiveBufferSize(64 * 1024 * 1024);

2. 设置时机 : 注意设置缓冲区一定要在 accept 之前进行设置 , 如果在连接建立之后设置该缓冲区是无效的 ;

IV ServerSocket 设置超时时间


1. 设置 ServerSocket 超时时间 , 该超时时间没有实际的概念 , 用于设置与阻塞相关操作的超时时间 , ServerSocket 中只有 accept 操作会有阻塞 , 设置了 2 秒阻塞时间 , 如果 accept 阻塞超过 2000 毫秒 , 就会抛出异常 , 此时可以捕获该异常继续等待 2 秒 ;

serverSocket.setSoTimeout(2000);

一般情况下不设置该超时时间 , 即服务器端永久等待客户端连接

2. 单位 : 毫秒 ( ms ) ;

V ServerSocket 设置性能参数


ServerSocket 调用 setPerformancePreferences 设置性能参数 , 与 Socket 调用 setPerformancePreferences 设置原理是一样的 ;

//对延迟性能要求最高
serverSocket.setPerformancePreferences(1, 10, 1);

1. 调用 ServerSocket 对象的 setPerformancePreferences 方法 , 设置连接的性能参数 ; 连接有以下三个性能参数 :

  • ① 连接时间 ;
  • ② 往返延迟 ;
  • ③ 带宽 ;

2. 设置的是权重不是具体性能参数 : 设置的值不是具体的参数 , 而是连接的性能权重 , 对哪个性能要求比较高 ;

3. 连接时间 : 如果该 Socket 的连接很频繁 , 连接后传一个数据 , 马上断开 , 这时候比较看重连接时间性能 , 此时可以将第一个参数设置成 10 , 后两个参数设置成 1 , 表示注重连接时间性能 ;

//设置 连接时间 性能参数较重要
socket.setPerformancePreferences(10, 1, 1);

4. 往返延迟 : 如果开发的是网游服务器 , 此时对延迟很看重 , 这时候可以将第二个参数设置成比较高的权重 ;

//设置 往返延迟 性能参数较重要
socket.setPerformancePreferences(1, 10, 1);

5. 带宽 : 如果开发的是音视频服务器 , 注重带宽性能 , 此时需要将第三个参数设置成较高的权重 ;

//设置 带宽 性能参数较重要
socket.setPerformancePreferences(1, 10, 1);

6. 上面的延迟和带宽的性能是互斥的 , 延迟低 , 就意味着很小的包就要发送一次 , 其带宽就低了 , 延迟高了 , 每次积累很多数据才发送 , 其带宽就相应的提高了 ;

7. 函数原型 :

    /*** Sets performance preferences for this socket.** <p> Sockets use the TCP/IP protocol by default.  Some implementations* may offer alternative protocols which have different performance* characteristics than TCP/IP.  This method allows the application to* express its own preferences as to how these tradeoffs should be made* when the implementation chooses from the available protocols.** <p> Performance preferences are described by three integers* whose values indicate the relative importance of short connection time,* low latency, and high bandwidth.  The absolute values of the integers* are irrelevant; in order to choose a protocol the values are simply* compared, with larger values indicating stronger preferences. Negative* values represent a lower priority than positive values. If the* application prefers short connection time over both low latency and high* bandwidth, for example, then it could invoke this method with the values* {@code (1, 0, 0)}.  If the application prefers high bandwidth above low* latency, and low latency above short connection time, then it could* invoke this method with the values {@code (0, 1, 2)}.** <p> Invoking this method after this socket has been connected* will have no effect.** @param  connectionTime*         An {@code int} expressing the relative importance of a short*         connection time** @param  latency*         An {@code int} expressing the relative importance of low*         latency** @param  bandwidth*         An {@code int} expressing the relative importance of high*         bandwidth** @since 1.5*/public void setPerformancePreferences(int connectionTime,int latency,int bandwidth)

【Java 网络编程】服务器端 ServerSocket 配置 ( 端口复用 | 缓冲区设置 | 超时时间 | 性能权重 | 端口绑定 )相关推荐

  1. 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )

    文章目录 I 客户端代码示例 II 服务器端代码示例 III 运行结果 I 客户端代码示例 import java.io.IOException; import java.io.InputStream ...

  2. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  3. Java网络编程(四)—— ServerSocket(一)

    Java网络编程(四)-- ServerSocket(一) Java网络编程(四)-- ServerSocket(一) 总述 创建ServerSocket 绑定端口 使用ServerSocket 总述 ...

  4. 【Java 网络编程】TCP 服务器端 客户端 简单示例

    文章目录 I IntelliJ IDEA 创建 Java 项目 II 客户端 Socket 创建 III Socket 客户端连接服务器端 IV Socket 两个端点信息获取 V 控制台人机交互 V ...

  5. NIO详解(一):java网络编程IO总结(BIO、NIO、AIO)

    1.基本概念 在Java网络通信中,最基本的概念就是Socket编程了.Socket又称"套接字" 向网络发出请求或者应答网络请求. Socket 和ServerSocket类库位 ...

  6. JAVA网络编程知识学习

    JAVA网络编程知识学习 学习目标 第一章 网络编程入门 1.1软件结构 1.2 网络通信协议 1.3 协议分类 1.4 网络编程三要素 协议 IP地址 IP地址分类 常用命令 端口号 InetAdd ...

  7. 04.Java网络编程(转载)

    1.网络编程 1.1计算机网络概述 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 按照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含 ...

  8. 【带你入门】java网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  9. 你对Java网络编程了解的如何?Java NIO 网络编程 | Netty前期知识(二)

    本文主要讲解NIO的简介.NIO和传统阻塞I/O有什么区别.NIO模型和传统I/O模型之间的对比.以及围绕NIO的三大组件来讲解,理论代码相结合. 很喜欢一句话:"沉下去,再浮上来" ...

最新文章

  1. C#和JavaScript的简单互交
  2. 使用matlab做可重复性实验结果——rng
  3. node学习准备工作1 --- nvm下载、终端环境iterm2配置
  4. 《算法竞赛进阶指南》打卡-基本算法-AcWing 95. 费解的开关:位运算、枚举、递推
  5. 关于Unable to instantiate activity ComponentInfo错误解决方案
  6. lazada发货_Lazada怎么发货?最全Lazada发货流程及注意事项!值得收藏!
  7. PHP实现各种经典算法
  8. 局域网内文件传输速度_详解蒲公英路由器组网 实现文件共享
  9. ORA-00304: requested INSTANCE_NUMBER is busy
  10. SAP ABAP 打印(smartforms方式)
  11. 转载:::::简单分享一个轻量级自动化测试框架目录结构设计
  12. Active Directory 灾难恢复
  13. 裁员潮下,工程师该何去何从?
  14. 2022-2027年(新版)中国石墨烯行业竞争态势及发展前景预测报告
  15. mistake - pwnable
  16. [江枫]In Memory Undo与logical standby database
  17. PS示例教程:如何用Photoshop打磨质感水晶风格图标
  18. android蓝牙打印机打印图片,如何使用打印机(通过蓝牙打印)从Android设备打印图像和一些数据?...
  19. SIGMOD 2017论文的摘要与看法
  20. MTK支持的DRM简介

热门文章

  1. MSVCR80D.dll not found 问题(转)
  2. 站长常用广告代码的表达大全
  3. Delphi实例分析:远程传输数据和文件
  4. FlinkCEP - Complex event processing for Flink
  5. discuz_style_default.xml修改
  6. 即时通讯软件设计(一)
  7. (积累)java里的套接字
  8. Convert.ToInt32
  9. IDEA中每次拷贝一个项目的时候必须标记一下配置文件resources,否则报错
  10. 《一起》个人进展——Day06