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连接的相关设置
- void setTcpNoDelay(boolean on);boolean getTcpNoDelay()这个设置主要针对一些很小数据包,为了提高有效数据的传输,而进行的一些缓存设置。设置为True的时候,会缓存数据包,提高有效数据的占用率。
- setSoLinger;int getSoLinger()当关闭socket的时候,如果缓存中还有数据要发送,就等一段时间,阻塞。默认情况下,关闭连接的时候,清除掉缓存数据
- void setOOBInline(boolean on);void sendUrgentData(int data)第一个是设置发送紧急字段,第二个是发送具体的字节。int的中低8位发送
- void setSoTimeout(int timeout);getSoTimeout读数据的阻塞时间,0代表无限时间阻塞,其他正整数为有一定时间阻塞,单位毫秒
- void setSendBufferSize(int size); public int getSendBufferSize()void setReceiveBufferSize(int size);getReceiveBufferSize;为底层设置缓存大小,不一定被底层采用。
- void setKeepAlive(boolean on):boolean getKeepAlive()Tcp长连接设置,在没有数据的时候保持2个小时的长连接,再进行探测。
- void setTrafficClass(int tc) public int getTrafficClass()。没看懂,设置帧中的阻塞等级。
- boolean getReuseAddress();void setReuseAddress(boolean on)。一般在关闭socket后会保持一段时间端口,防止关闭ack的数据包丢失。默认是不启用这个功能。
- public void close()关闭
- void shutdownInput()输入关闭
- void shutdownOutput()输出关闭
- isConnected; boolean isBound();boolean isClosed();boolean isInputShutdown();boolean isOutputShutdown()相关状态查询
- setSocketImplFactory不用系统默认的Socketimp类,自己定义
- void setPerformancePreferences(int connectionTime, int latency, int bandwidth)对一些性能的设置,不一定为底层采用
ServerSocket
服务器端的接口。相比于socket主要不同是:
- Socket accept()是监听端口如果有连接返回一个socket对象 2.void setSoTimeout(int timeout) 阻塞时间长度,主要针对accept函数。
Client:
server
参考:
其他相关的知识
- 文件表示FileDescriptor。可以好好深入一下,根据一下网址深入研究一下:blog.csdn.net/moakun/arti…
- TCP的连接中断方式:心跳与长连接。
- SSSocket
- PrintWrite 打印字符输出流,与write不同是具有自动刷新功能。
- getChannel还没有看清楚。