一.构造ServerSocket

  1. 构造方法

    (1)new ServerSocket( )

    (2)new ServerSocket(int port,int backlog)

    (3)new ServerSocket(int port,int backlog,InetAddress bindAddr)

    除第一种方法外,其他都会立即尝试绑定端口.第一种方便添加ServerSocket的参数,bind(SocketAddress address)手动绑定端口

  2. 设定客户端连接请求队列长度

    管理客户连接请求的任务是操作系统完成的,操作系统把连接请求存在一个队列中.该队列默认长度为50,当超过这个队列的长度限制时,操作系统会拒绝新的客户端连接请求.只有当ServerSocket的accept()方法从就绪队列中取出连接,使得队列有空位置时才能继续加入新请求.

    SoerSocket构造方法中的backlog参数显式指定请求队列的长度.当一下2种情况,该参数值无效 :

    (1)backlog值 > 操作系统的最大队列长度

    (2)backlog参数值小于等于0

  3. 关闭ServerSocket

    Serversocet的close( )方法是服务器释放占用的端口,并断开与所有客户的连接.当开启ServerSocket的线程执行完毕,ServerSocket会自动关闭.只要一个ServerSocket对象与一个端口绑定过,无论其是否已经close,isBound()方法永远返回true.所以判断ServerSocket是否正在与端口绑定:

    serverSocket.isBound() && !serverSocket.isClosed()

二. ServerSocket选项

  1. SO_TIMEOUT

    该参数表示ServerSocket的accept()方法等待客户端连接的超时时间,该值默认为0,永不超时. 服务器的ServerSocket的accecpt()方法在没有客户端连接请求时会阻塞,只有接受了一个客户端请求,才能从accecpt()方法返回.setServerSocket(6*1000)表示accept()方法在阻塞6秒后一定返回,若没有客户端连接,抛出SocketTimeoutExeption
  2. SO_REUSEADDR选项
  3. SO_RCVBUF选项

    设定接收数据的缓冲区大小

三. ServerSocket用法的更多相关文章

  1. using 的三种用法

    using 有哪三种用法? 1)引入命名空间. 2)给命名空间或者类型起别名. 3)划定作用域.自动释放资源,使用该方法的类型必须实现了 System.IDisposable接口,当对象脱离作用域之后 ...

  2. Js闭包常见三种用法

        Js闭包特性源于内部函数可以将外部函数的活动对象保存在自己的作用域链上,所以使内部函数的可以将外部函数的活动对象占为己有,可以在外部函数销毁时依然存有外部函数内的活动对象内容,这样做的好处是可 ...

  3. .NET(c#)new关键字的三种用法

    前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ...

  4. SQL、LINQ、Lambda 三种用法(转)

    SQL.LINQ.Lambda 三种用法颜色注释: SQL LinqToSql Lambda QA1. 查询Student表中的所有记录的Sname.Ssex和Class列.select sname, ...

  5. c# new关键字的三种用法

    三种用法如下: 在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成 ...

  6. java中 this 的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  7. 子查询。ANY三种用法。ALL两种用法。HAVING中使用子查询。SELECT中使用子查询。

    子查询存在的意义是解决多表查询带来的性能问题. 子查询返回单行多列: ANY三种用法: ALL两种用法: HAVING中的子查询返回单行单列: SELECT中使用子查询:(了解就好,避免使用这种方法! ...

  8. java中 this 关键字的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  9. C++学习---- virtual的三种用法

    virtual用法一:多态 #include<iostream> using namespace std; class A{ public: virtual void display(){ ...

随机推荐

  1. C++ Primer : 第十章 : 泛型算法 之 lambda表达式和bind函数

    一.lambda表达式 lambda表达式原型: [capture list] (parameter list) -> retrue type { function body } 一个lambd ...

  2. eBay_GTC和Relist

    1.销售里面有个GTC 那个可以给你做累计销量,如果累计销量高,能大幅提升你的排名位置也可以用30天的摆放方法,修改里面数量,但是30天结束后relist就不知结果了关于累计销量 google搜索里面 ...

  3. 关于freemarker标签+Spring3.0 V层学习

    import标签 就是把其他的ftl页面引用进来 <#import "/common/ui.ftl" as ui> 使用时 <@ui.message/>,m ...

  4. Android ADT初始化失败

    在android的官网上买下载android的adt完了,进行解压之后,开始点击 eclipse.exe,果然给了我一个惊喜,那就是 [ Failed to create the Java Virtu ...

  5. JavaWeb学习记录(二十七)——定时发送邮件ServletContextListener监听实现

    public class EmailSendListener implements ServletContextListener{ @Override    public void contextDe ...

  6. 【BZOJ1004】【HNOI20008】cards

    看黄学长的代码才写出来的,sro_hzwer_orz 原题: 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给 ...

  7. java多线程:java队列详解

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有元素时,称为空队列. 在队列这 ...

  8. jfinal对象封装Record原理

    /*DbPro.class*/ public transient Record findFirst(String sql, Object paras[]{ List result = find(sql ...

  9. 利用sql_trace跟踪一个指定会话的操作

    1.  sys用户给管理用户授权.SQL> grant execute on sys.dbms_system to andy;Grant succeeded.2. 查询被跟踪用户的sid,ser ...

  10. Android 编程下去除 ListView 上下边界蓝色或黄色阴影

    默认的情况下,在 ListView 滑动到顶部或者是底部的时候,会有黄色或者蓝色的阴影出现.在不同的版本上解决的方法是不同的,在 2.3 版本之前可以在 ListView 的属性中通过设置 andro ...