文档章节

Java网络编程学习笔记(3)ServerSocket用法详解

joker_zhou
 joker_zhou
发布于 2014/07/17 16:05
字数 685
阅读 23
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

ServerSocket用法详解

ServerSocket负责接受客户端连接请求

ServerSocket构造:
ServerSocket()        

ServerSocket(intport)

ServerSocket(intport, int backlog)

ServerSocket(intport, int backlog, InetAddressbindAddr)
port绑定的端口,backlog客户请求的队列长度,bindAddr服务器绑定的IP地址

(1)绑定端口

a)       构造时会让serverSocket绑定一个端口,无法绑定端口会发出BindException,通常造成这个状况的愿意是端口被其他服务程序占用,有些端口不能被随便使用.

(2)设定客户端请求列队长度

a)       管理客户请求的任务是由操作系统决定的,操作系统把请求储存在FIFO的队列中,当队列满时只有ServerStocket的accept方法获取请求后才能继续向队列加入请求.虽然队列长度是由操作决定的(WIN  为50个),但是ServerStock的队列长度参数是可以覆盖系统规定的长度,但以下几种情况还是会采取系统长度:

i.   大于系统限定的最大长度

ii.  小于等于0

iii.没有采用有长度的构造

(3)绑定IP地址

a)       如果一台机器在局域网内,可以使用局域网的IP地址,使用构造4可以实现自定义绑定IP地址.

(4)Stock和ServerStock的默认构造使用

a)       因为如果绑定了端口有一些设置就无法生效了.比如SO_REUSEADDR,所以需要这种不绑定端口的默认构造,然后使用bind(InetStocketAddress(int)) 方法绑定一个端口

接受和关闭与客户的连接

(1) 使用ServerStock的accept方法从请求列队中取得一个客户连接,如果队列中没有请  求连接的话accept会阻塞.

(2)使用close方法会使得释放占用的端口,isClose方法会检查是否已经关闭.

获取ServerSocket的信息

(1)使用getInetAddress方法获得绑定的Ip地址

(2)使用getLocalPort 方法获得绑定的端口
       使用这个方法可以将匿名端口获得(构造绑定端口时设置为0,系统会随即分配一个端口)

ServerSocket选项

(1)SO_TIMEOUT(accept等待延迟时间)

    setSoTimeout(int)毫秒做单位,不设置accept会一直阻塞等待下去,而是设置后会在超过等待时间抛出SocketTimeoutException,0是永远不会超时.

(2)SO_REUSEADDR(是否延时关闭)

            setReuseAddress(false)同Socket,决定如果网络上仍有数据向旧    ServerSocket传输数据,是否允许新的ServerSocket绑定到旧的ServerSocket  相同的端口上.在bind端口前用

(3)SO_RCVBUF(设置接受缓冲区大小)

        setReceiveBufferSize(int)同stock的,单位字节kb

本文转载自:http://blog.csdn.net/joker_zhou/article/details/7325288

joker_zhou
粉丝 2
博文 100
码字总数 4167
作品 0
青岛
私信 提问
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
基于tcp和udp的socket实现

本文介绍如何用Java实现Socket编程。首先介绍Java针对Socket编程提供的类,以及它们之间的关系。然后分别针对TCP和UDP两种传输层协议实现Socket编程。 1 Java中的Socket编程接口介绍 Java为S...

chjuaner
2017/11/07
85
0
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
java编程好文章链接收集

JNDI配置原理详解 ExtJS学习笔记系列 .java中的io系统总结及一些常用的操作 java面试笔试题总结 Java基础:三步学会Java Socket编程 HTTP详解 SpringSide开发实战 SVN与源代码管理 Linux和J...

长平狐
2012/11/12
79
0
12.5-全栈Java笔记:Java网络编程(三)

上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。 那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信...

全栈Java
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

有哪些常用的命名git分支实例的例子? [关闭]

现在,我已经使用本地git存储库与我的组的CVS存储库进行了几个月的交互。 我已经制作了一个几乎神经质的分支,其中大部分幸运地合并回我的行李箱。 但是命名开始成为一个问题。 如果我有一个...

javail
3分钟前
1
0
在virtualenv中使用不同的Python版本

我有一个目前使用python 2.5.4运行的Debian系统。 我正确安装了virtualenv,一切正常。 我是否可以将virtualenv与其他版本的Python一起使用? 我编译了Python 2.6.2,并希望将其与一些virtu...

技术盛宴
19分钟前
4
0
保证金术语参考

术语,定义 1.钱包, 余额. ON THE ENCHANGED CONVERGENCE OF STANDARD LATTICE METHODS FOR OPTION PRICING...

MtrS
22分钟前
3
0
x006-函数和模块的使用

函数和模块的使用 在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数...

伟大源于勇敢的开始
31分钟前
3
0
为什么面试必问线程状态?你的回答满分了吗

看很多同学的面经、网上的面试资料,都不约而同的提到了一个基础问题:“你知道线程有几种状态吗?状态之间的扭转是怎样的?”,有准备的同学都知道有五种:New(新建)、Runnable(可运行)...

Z_J_H
32分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部