Socket----java.net

223 阅读3分钟

1简介

socket的类是低端的Tcp客户端接口。他的实现是靠SocketImp的子类来实现,SocketImp是一个抽闲类,用于Socket、serverSocket的抽闲实现,具体的子列实现功能。Socket类中调用一个工厂类SocketFactary返回一个具体的Socket类。

Socket: 主要先关函数:

  • void bind(SocketAddress bindpoint) 与本地ip与端口绑定
  • void close()关闭socket,并关闭相关流、通道资源。
  • void connect(SocketAddress endpoint) ;void connect(SocketAddress endpoint, int timeout) 连接serverSocket,如果直接采用流的时候,不用打开connnet,流为隐式的打开连接
  • InetAddress getInetAddress();getInetAddress;int getPort();int getLocalPort();SocketAddress getRemoteSocketAddress();SocketAddress getLocalSocketAddress()或者本地与连接的端口与ip地址
  • InputStream getInputStream(); OutputStream getOutputStream();SocketChannel getChannel()打开输入流、输出流、通道。如果通道已经打开,输入输出流为代理给通道。输出流一般采用PrintWriter类(采用OutputStreamWriter进行字节流与字符流的转换)进行自动刷新。而输入流一般采用缓存的方式进行。
  • 参数设置,针对Tcp连接的相关设置
  1. void setTcpNoDelay(boolean on);boolean getTcpNoDelay()这个设置主要针对一些很小数据包,为了提高有效数据的传输,而进行的一些缓存设置。设置为True的时候,会缓存数据包,提高有效数据的占用率。
  2. setSoLinger;int getSoLinger()当关闭socket的时候,如果缓存中还有数据要发送,就等一段时间,阻塞。默认情况下,关闭连接的时候,清除掉缓存数据
  3. void setOOBInline(boolean on);void sendUrgentData(int data)第一个是设置发送紧急字段,第二个是发送具体的字节。int的中低8位发送
  4. void setSoTimeout(int timeout);getSoTimeout读数据的阻塞时间,0代表无限时间阻塞,其他正整数为有一定时间阻塞,单位毫秒
  5. void setSendBufferSize(int size); public int getSendBufferSize()void setReceiveBufferSize(int size);getReceiveBufferSize;为底层设置缓存大小,不一定被底层采用。
  6. void setKeepAlive(boolean on):boolean getKeepAlive()Tcp长连接设置,在没有数据的时候保持2个小时的长连接,再进行探测。
  7. void setTrafficClass(int tc) public int getTrafficClass()。没看懂,设置帧中的阻塞等级。
  8. boolean getReuseAddress();void setReuseAddress(boolean on)。一般在关闭socket后会保持一段时间端口,防止关闭ack的数据包丢失。默认是不启用这个功能。
  9. public void close()关闭
  10. void shutdownInput()输入关闭
  11. void shutdownOutput()输出关闭
  12. isConnected; boolean isBound();boolean isClosed();boolean isInputShutdown();boolean isOutputShutdown()相关状态查询
  13. setSocketImplFactory不用系统默认的Socketimp类,自己定义
  14. void setPerformancePreferences(int connectionTime, int latency, int bandwidth)对一些性能的设置,不一定为底层采用

ServerSocket

服务器端的接口。相比于socket主要不同是:

  1. Socket accept()是监听端口如果有连接返回一个socket对象 2.void setSoTimeout(int timeout) 阻塞时间长度,主要针对accept函数。

Client:

server

参考:

  1. docs.oracle.com/javase/tuto…
  2. docs.oracle.com/javase/7/do…

其他相关的知识

  • 文件表示FileDescriptor。可以好好深入一下,根据一下网址深入研究一下:blog.csdn.net/moakun/arti…
  • TCP的连接中断方式:心跳与长连接。
  • SSSocket
  • PrintWrite 打印字符输出流,与write不同是具有自动刷新功能。
  • getChannel还没有看清楚。