`
QING____
  • 浏览: 2253275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA-Socket/ServerSocket API简述

    博客分类:
  • JAVA
 
阅读更多

一.Socket(套接字):Socket是实现P2P数据通讯的基础.

  • Socket()
  • Socket(String host,int port)
  • Socket(InetAddress,int port)
  • public void connect(SocketAddress address):将套接字连接到远程.如果已经bind或者connect,将抛出异常.链接将阻塞,直到成功或者失败返回.
  • public void bind(SocketAddress address):将Socket绑定到本地地址上.
  • SocketChannel getChannel(): NIO实现.获取与当前socket唯一绑定的"通道".
  • public InputStream getInputStream():获取当前套接字的输入流.可以通过inputStream获取数据.如果当前socket没有关闭,或者inputStream没有被shutdown,将返回.
  • public OutputStream getOutputStream():获取当前socket的输出流,允许在输出流中write数据.
  • public void setTcpNoDelay(boolean on):启用/禁用TCP_NODELAY选项.默认数据不会立即发送,而是先存储在缓冲区中,等缓冲区满或者指示发送时才会发送(block).发送一批数据后会等待接受对方对数据的回应,然后再发送下一批.此为Negale算法.此算法适合发送方需要持续发送较大数据块而且对数据响应允许延迟的情况,此算法在一定程度上减少了网络通信交互的次数,提高了传输效率.不过,如果发送的数据很小(简单指令)而且需要对数据立即回应的,Negale算法直接会导致发送方稍慢.默认TCP_NODELAY为false.可以通过此方法设置.如果为true,将会导致任何进入缓冲的字节,将被立即发送.
  • public void setLinger(boolean on,int linger):启用/禁用指定"逗留"的时间.设置为SO_LINGER选项.默认close()方法会立即返回,但是底层的socket实际上不会立即被销毁,它会延迟一段时间,直到所有的数据均已被发送,才会真正关闭Socket,断开连接(有点类似ServerSocket的REUSEADDR).如果此参数为true,且linger时间大于0,那么close方法将会被阻塞,底层的socket将会尝试尽力发送剩余的数据.如果阻塞时间超时(linger时间)或者数据已经发送完毕,close方法返回;否则数据被丢弃,此时socket关闭.当交互的数据相对重要且有完整性约束时,可以设置linger来尽力确保数据的发送.
  • public void setOOBInline(boolean on):启用/禁用OOBINLINE选项.此选项默认为false.如果为true,表示支持发送一个字节的紧急数据,可以通过sendUrgentData(int data)来发送紧急数据.这两个方法需要配合使用.如果为false,那么发送的紧急数据,接收方会丢弃.由于协议的限制和平台的实现,紧急数据的发送并非一定优先.而且接收方也无法分辨紧急数据和普通数据(stream方式).
  • public void SetSoTimeout(int timeout):设置SO_TIMEOUT.此参数对于inputStream上read操作有影响,允许read被阻塞(空闲的)最大时间.如果超时,将会抛出一个异常,不过底层的socket仍然是有效的.
  • public void setSendBufferSize(int size)/setReceiveBufferSize(int size):设置SO_SNDBUF/SO_RCVBUF.一般来说,传输较大的连续的block(HTTP,FTP),可以设置较大的sendBuffer,有利于减少网络交互的次数而提高传输效率,对于单次数据量较小的操作(游戏操作/指令操作),可以设置较小的sendBuffer,以确保数据可以被更快的响应.
  • public void setKeepAlive(boolean on):启用/禁用SO_KEEPALIVE.如果SO_KEEPALIVE为true,那么底层的TCP将会对连接的存活进行监视.当连接处于空闲状态,即没有实际数据操作时,本地TCP实现会发送一个"探测数据包"给远端.如果尝试几次,远端都没有响应,那么此链接将会被自动关闭.如果此参数为false,那么TCP将不会监视链接的有效性,不活动的客户端可能会永远存活下去,而无法发现服务器的崩溃.(即在空闲时,无法发现崩溃).
  • public void setReuseAddress(boolean on):当Socket关闭时,底层的socket不会立即释放本地端口,而是会等待一会,确定端口上不再有数据接收时,才会释放端口.这是为Socket上接收延迟数据,为了避免program关闭连接后,其他程序立即绑定到相同的端口,有可能此程序可能会读取到延迟的数据.REUSEADDR为false,那么新的进程/线程将无法绑定到旧端口上,知道socket释放.只有前后2个连接都设定了REUSEADDR为true,才会导致port重用.一般情况下,我们认为同一个程序的短暂重启,可以使用此参数.
  • public InputStream getInputStream() throws IOException:获取socket的输入流,实现类为SocketOutputStream.如果当前socket已经被关闭,则抛出SocketException异常.如果当前inputStream被关闭,例如通过socket.shutdownInput(),此时将抛出异常,即如果inputstream被关闭,将不能重新获取引用.此时如果对inputStream进行read操作,将会直接返回EOF(-1).
  • public OutputStream getOutputStream() throws IOException:获取socket的输出流,底层实现类为SocketOutputStream.
  • public void shutdownOutput():在不关闭socket的情况下,单向关闭输出流.此后将不能进行数据的发送.关闭当前socket的输出流,此时将会发送尚未发送的数据,并在此后追加EOF序列,即远端socket将会在read是获得-1.此后如果在OutputStream中调用write,将抛出IOException.
  • public void shutdownInput():在不关闭socket的情况下,单向关闭输入流.关闭当前socket的输入流,半关闭状态.输入流关闭后(API级别),将不能再次从inputStream中read数据,read时直接返回-1.底层对待此后收到的发送时,会直接忽略掉.
    while(inputStream.read() > 0){
    
    //nothing
    
    }
     
  •  public void setPerformancePreference(int connectionTime,int latency,int bandwidth):设定选项的现对重要性.设定连接时间,延迟和带宽.connectionTime为最小时间建立连接latency:表示最小延迟bandwidth:表示最高带宽这三个参数只是建议性选项,这三个值可以任意,值较大者表示重要性最高.

二.ServerSocket:远端Socket.实现连接的接受和数据的处理.

  • ServerSocket()
  • ServerSocket(int port,int backlog):其中backlog参数为服务器连接允许的最大队列长度,此值将会覆盖操作系统限定的最大长度.如果建立连接请求的个数大于最大尺寸,那么进程所在主机将会直接拒绝连接,导致socket连接异常.
  • public void bind(SocketAddress address):将serverSocket绑定到本机指定端口.
  • public ServerSocketChannel getChannel():获取与当前Socket绑定的唯一通道,NIO使用.
  • public void setSoTimeout(int time):用来控制serverSocket上accept阻塞的最大时间.其他参数和Socket几乎一致.
分享到:
评论

相关推荐

    JAVA API文档

    9. **网络编程**:`java.net`包包含用于网络通信的类,如`Socket`,`ServerSocket`,以及URL和URI的相关类。这些类用于建立TCP/IP连接,发送HTTP请求,以及解析网络地址。 10. **反射和动态代理**:`java.lang....

    Java课程设计之网络编程教学.zip

    Java提供了丰富的API,如Socket和ServerSocket类,用于实现客户端-服务器通信模式。Socket代表了网络上的一个连接,而ServerSocket则是监听并接受客户端连接的端点。通过这两个类,我们可以创建基于TCP/IP协议的稳定...

    Java各个包简述.pdf

    24. **java.net**:网络编程的类,包括Socket、ServerSocket和URL等。 25. **java.nio**:非阻塞I/O(New I/O)包,提供缓冲区、通道和选择器等。 26. **java.nio.channels**:定义了通道和选择器,支持异步I/O...

    Java核心技术卷I和II(第八版)

    1. **网络编程**:讲解如何利用Java进行TCP和UDP网络通信,以及Socket和ServerSocket的使用。 2. **GUI编程**:介绍Java的Swing和JavaFX库,用于构建桌面应用程序的用户界面。 3. **数据库编程**:涵盖JDBC API,...

    java网络协议内幕

    - **Java中的网络编程**:解释Java如何支持网络编程,包括标准库中的关键类和接口,如`Socket`、`ServerSocket`等。 #### 2. Socket编程 - **基本原理**:介绍Socket的工作机制以及如何使用Socket建立客户端与...

    操作系统实训-qq聊天.docx

    - Java提供了`java.net.Socket`类和`ServerSocket`类来实现Socket通信。`Socket`用于客户端,`ServerSocket`用于服务器端。 - 客户端创建Socket实例,指定服务器的IP和端口号,然后通过Socket对象的`...

    《Java核心技术 卷2 高级特性 原书第8版》 PDF+高清+影印+全书签.rar

    2. **网络编程**:Java提供了丰富的API用于网络通信,如Socket和ServerSocket类,使得开发者可以构建复杂的网络应用程序。书中涵盖了TCP/IP通信、HTTP协议以及套接字编程等主题。 3. **IO/NIO**:Java的输入/输出...

    Internet实务系列丛书 JAVA快速查询手册.pdf

    9. **网络编程**:Java提供了丰富的类库进行网络编程,如Socket和ServerSocket,可以用于创建客户端和服务器应用程序。 10. **JDBC与数据库交互**:Java Database Connectivity (JDBC) 是Java与各种数据库进行交互...

    java高级练习题 java 高级

    5. **网络编程**:Java提供了Socket和ServerSocket类来实现客户端-服务器通信。理解和应用套接字编程可以构建分布式系统和网络应用程序。 6. **设计模式**:设计模式是解决常见软件设计问题的模板,如单例模式、...

    《Java核心技术 卷1 基础知识(原书第9版)》+《Java核心技术 卷2 高级特性(原书第9版)》(PDF带目录完整中文版)

    根据提供的文件信息,我们可以推断出这是一套关于Java编程语言的核心技术书籍,分为两卷:第一卷主要介绍基础知识,第二卷则深入探讨高级特性。接下来,我们将详细地解析这两本书可能涵盖的主要知识点。 ### 第一卷...

    java程序入门教程

    11. **网络编程**:介绍Socket编程,如何创建服务器端和客户端进行数据传输,以及ServerSocket和Socket类的使用。 12. **Java API和JDBC**:讲解如何使用Java标准库(API)提供的类和方法,以及Java数据库连接...

    (小鱼)sun公司java培训资料

    15. Web服务:简述Java在构建RESTful API和SOAP Web服务中的角色。 六、Java反射与注解 16. 反射:掌握Class类的使用,动态获取类信息,创建对象,调用方法和访问字段。 17. 注解:了解注解的元数据功能,以及...

    JAVA编程兵书

    8. **网络编程**:涵盖JAVA的网络编程,如Socket通信,ServerSocket,HTTP客户端和服务器的实现。 9. **反射与动态代理**:讨论JAVA的反射API,如何在运行时获取类的信息,创建并调用对象,以及动态代理的实现。 ...

    华为java面试题

    - **知识点解析**:在Java中,进行Socket编程主要涉及到以下几个API: - **Socket**:表示客户端的Socket连接。 - **ServerSocket**:用于监听客户端连接请求的服务器端Socket。 - **InputStream/OutputStream**...

    java初级ppt

    13. **网络编程**:基础的TCP/IP通信,Socket编程,以及ServerSocket和Socket类的使用。 14. **Java Applet**:简述Java小应用程序的开发,用于网页交互。 这份"java初级课件"应当包含了这些核心知识点,帮助初学...

    简单web服务器实现

    - **Socket 编程**:使用 Java 的 Socket API 实现客户端与服务器间的通信。 - **HTTP 协议理解**:理解和实现 HTTP 协议的基本请求和响应过程。 - **文件读取**:读取服务器磁盘上的 HTML 文件并将其发送给客户端。...

    张孝祥java就业培训教程(完整版电子书)

    7. **网络编程**:讲解Socket编程,包括TCP和UDP协议,以及ServerSocket和Socket类的使用。 8. **反射**:解释Java的反射机制,如何在运行时动态获取类信息,创建对象,以及调用方法。 9. **JVM原理**:简述Java...

    Java程序设计电子_叶乃文

    17. Socket编程:讲解TCP和UDP通信,如何创建ServerSocket和Socket对象,实现客户端和服务器的交互。 八、Java高级特性 18. Lambda表达式:介绍Java 8引入的函数式编程特性,以及如何简化代码。 19. Stream API:...

    Java程序设计教学PPT

    9. **网络编程**:涵盖Socket编程,包括TCP和UDP通信,以及ServerSocket和Socket类的使用。 10. **Java Applet和Swing**:介绍如何创建和运行Java小应用程序(Applet),以及Swing组件库用于构建图形用户界面(GUI...

    《Java开发实战经典》教师讲解PPT.7z

    11. **网络编程**:讲解Socket编程基础,包括TCP和UDP通信,以及ServerSocket和Socket类的使用。 12. **Java Applet**:简要介绍Java小程序及其在网页中的应用,以及Applet的生命周期。 13. **Swing和AWT**:讲解...

Global site tag (gtag.js) - Google Analytics