java 网络编程

  • java独特的I/O方法
  • java的I/O是建立在流上面的
  • 输出流写入数据,输入流读取数据,即输出流将数据写入缓冲区,输入流将数据从缓冲区里面读出来
  • 所有的输出流写入数据的方法相同,所有的输入流读取数据的方法相同
  • 流是同步的即流是阻塞的,它会在读取数据之后进行其他操作
  • 使用write(byte[])或write(byte[],int off,int length)通常比一次发送一个字节要快得多
  • flush刷新:flush方法可以强迫窝在缓冲区里的数据的流发送数据,即便此时缓冲区还没有满
  • 在关闭流之前应刷新流。否则,流在关闭时,在缓冲区里的数据可能丢失
  • IOException异常,close方法会将与这个流关联的所有资源都释放,进一步的写入就会抛出异常
  • 缓冲区与内存的区别,缓冲区在内存上开辟
  • 原始流:InputStream和OutputStream是原始流,仅仅能够单个或成组的读写字节而已
  • 过滤器流:附加到原始流,在字节和各种格式之间来回转换
  • 从底层流读取几百个字节的速度与读取一个字节相当

    socket基础

    socket的七项操作

  • 连接远程主机
  • 发送数据
  • 接收数据
  • 关闭连接
  • 绑定端口
  • 监听入站数据
  • 在所有绑定端口上接收来自远程机器的连接

    socket的本质

socket为内核对象,由操作系统内核来维护其缓冲区,引用计数,并且可以在多个线程中使用

当我们使用socket函数以后,如果成功的话会返回一个int型的描述符,它指向前面那个被维护在内核里的socket数据结构。我们的任何操作都是通过这个描述符而作用到那个数据结构上的。这就像是我们在建立一个文件后得到一个文件描述符一样,对文件的操作都是通过文件描述符来进行的,而不是直接作用到inode数据结构上

当建立了这个套接字以后,我们可以获得一个象文件描述符那样的套接字描述 符。就象我们对文件进行操作那样,我们可以通过向套接字里面写数据将数据传送到我们指定的地方,这个地方可以是远端的主机,也可以是本地的主机

建立socket连接,对于准备建立一个连接,服务器端要两个步骤:bind, listen;客户端一个步骤:connct。如果服务器端accept一个connect,而客户端得到了这个accept的确认,那么一个连接就建立了。

原文地址:https://www.cnblogs.com/tutumissed/p/8276630.html