java socket学习

socket
目录:
1、socket介绍
1.1、socket简介
1.2、socket之jdk
1.3、socket连接过程


正文:
 
1、socket介绍
1.1、socket简介
应用程序通常通过socket向网络发出请求或者应答网络请求。Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的
1.2socket之jdk
 
public class Socket
 
  extends Object
 
 
  

此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。

套接字的实际工作由 SocketImpl 类的实例执行。应用程序通过更改创建套接字实现的套接字工厂可以配置它自身,以创建适合本地防火墙的套接字。

构造方法摘要 Socket() 通过系统默认类型的 SocketImpl 创建未连接套接字 Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 Socket(InetAddress host, int port, boolean stream) 已过时。 Use DatagramSocket instead for UDP transport. Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程地址上的指定远程端口。 Socket(Proxy proxy) 创建一个未连接的套接字并指定代理类型(如果有),该代理不管其他设置如何都应被使用。 protected Socket(SocketImpl impl) 使用用户指定的 SocketImpl 创建一个未连接 Socket。 Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。 Socket(String host, int port, boolean stream) 已过时。 使用 DatagramSocket 取代 UDP 传输。 Socket(String host, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程主机上的指定远程端口。 

方法摘要 void bind(SocketAddress bindpoint) 将套接字绑定到本地地址。 void close() 关闭此套接字。 void connect(SocketAddress endpoint) 将此套接字连接到服务器。 void connect(SocketAddress endpoint, int timeout) 将此套接字连接到服务器,并指定一个超时值。 SocketChannel getChannel() 返回与此数据报套接字关联的唯一 SocketChannel 对象(如果有)。 InetAddress getInetAddress() 返回套接字连接的地址。 InputStream getInputStream() 返回此套接字的输入流。 boolean getKeepAlive() 测试是否启用 SO_KEEPALIVE。 InetAddress getLocalAddress() 获取套接字绑定的本地地址。 int getLocalPort() 返回此套接字绑定到的本地端口。 SocketAddress getLocalSocketAddress() 返回此套接字绑定的端点的地址,如果尚未绑定则返回 null。 boolean getOOBInline() 测试是否启用 OOBINLINE。 OutputStream getOutputStream() 返回此套接字的输出流。 int getPort() 返回此套接字连接到的远程端口。 int getReceiveBufferSize() 获取此 Socket 的 SO_RCVBUF 选项的值,该值是平台在 Socket 上输入时使用的缓冲区大小。 SocketAddress getRemoteSocketAddress() 返回此套接字连接的端点的地址,如果未连接则返回 null。 boolean getReuseAddress() 测试是否启用 SO_REUSEADDR。 int getSendBufferSize() 获取此 Socket 的 SO_SNDBUF 选项的值,该值是平台在 Socket 上输出时使用的缓冲区大小。 int getSoLinger() 返回 SO_LINGER 的设置。 int getSoTimeout() 返回 SO_TIMEOUT 的设置。 boolean getTcpNoDelay() 测试是否启用 TCP_NODELAY。 int getTrafficClass() 为从此 Socket 上发送的包获取 IP 头中的流量类别或服务类型。 boolean isBound() 返回套接字的绑定状态。 boolean isClosed() 返回套接字的关闭状态。 boolean isConnected() 返回套接字的连接状态。 boolean isInputShutdown() 返回是否关闭套接字连接的半读状态 (read-half)。 boolean isOutputShutdown() 返回是否关闭套接字连接的半写状态 (write-half)。 void sendUrgentData(int data) 在套接字上发送一个紧急数据字节。 void setKeepAlive(boolean on) 启用/禁用 SO_KEEPALIVE。 void setOOBInline(boolean on) 启用/禁用 OOBINLINE(TCP 紧急数据的接收者) 默认情况下,此选项是禁用的,即在套接字上接收的 TCP 紧急数据被静默丢弃。 void setPerformancePreferences(int connectionTime, int latency, int bandwidth) 设置此套接字的性能偏好。 void setReceiveBufferSize(int size) 将此 Socket 的 SO_RCVBUF 选项设置为指定的值。 void setReuseAddress(boolean on) 启用/禁用 SO_REUSEADDR 套接字选项。 void setSendBufferSize(int size) 将此 Socket 的 SO_SNDBUF 选项设置为指定的值。 static void setSocketImplFactory(SocketImplFactory fac) 为应用程序设置客户端套接字实现工厂。 void setSoLinger(boolean on, int linger) 启用/禁用具有指定逗留时间(以秒为单位)的 SO_LINGER。 void setSoTimeout(int timeout) 启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。 void setTcpNoDelay(boolean on) 启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。 void setTrafficClass(int tc) 为从此 Socket 上发送的包在 IP 头中设置流量类别 (traffic class) 或服务类型八位组 (type-of-service octet)。 void shutdownInput() 此套接字的输入流置于“流的末尾”。 void shutdownOutput() 禁用此套接字的输出流。 String toString() 将此套接字转换为 String。 

主意:

重要的Socket API

重要的SocketAPI:java .net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。 Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个 客户端 的Socket 对象 实例。"阻塞"是一个术语,它使 程序 运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由 循环 产生的。 getInputStream方法获得网络连接输入,同时返回一个InputStream 对象 实例。 getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream 对象 实例。注意:其中getInputStream和getOutputStream方法均可能会产生一个IOException,它必须被捕获,因为它们返回的流 对象 ,通常都会被另一个流对象使用。
1.3、SOCKET连接过程
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 服务器 监听:是 服务器 套接字 并不定位具体的 客户端 套接字 ,而是处于等待连接的状态,实时监控网络状态。 客户端 请求:是指由 客户端 套接字 提出连接请求,要连接的目标是 服务器 端的套接字。为此, 客户端 套接字 必须首先描述它要连接的 服务器 的套接字,指出 服务器 端套接字的 地址 端口号 ,然后就向 服务器 端套接字提出连接请求。 连接确认:是指当 服务器 套接字 监听到或者说接收到 客户端 套接字的连接请求,它就响应 客户端 套接字的请求,建立一个新的线程,把 服务器 端套接字的描述发给 客户端 ,一旦客户端确认了此描述,连接就建立好了。而 服务器 套接字 继续处于 监听状态 ,继续接收其他 客户端 套接字的连接请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值