API之socket类

Socket类的构造函数:
Socket () 通过系统默认类型的 SocketImpl 创建未连接套接字
Socket (InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
Socket (String host, int port)   创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket (InetAddress address, int port, InetAddress localAddr, int localPort) 创建一个套接字并将其连接到指定远程端口上的指定远程地址。
Socket (String host, int port, InetAddress localAddr, int localPort)   创建一个套接字并将其连接到指定远程主机上的指定远程端口。
Socket (Proxy proxy) 根据不管其他设置如何都应使用的指定代理类型(如果有),创建一个未连接的套接字。
Socket (SocketImpl impl) 创建带有用户指定的 SocketImpl 的未连接 Socket。
还有两个已过时的构造函数,如果有用到再说吧。

 

1、第一个构造函数:

Socket skt = new Socket();

SocketAddress remoteaddr = new InetSocketAddress("localhost",8000);

skt.connect(remoteaddr,60000);//等待连接的超时时间为1分钟。

2、针对第二个构造函数:

Socket(InetAddress address,int port)

针对InetAddress类,有如下代码:

InetAddress  address = InetAddress.getLocalHost();

InetAddress  addr = InetAddress.getByName("ip地址");

 

到目前为止,跟返回网络地址有关的类有SocketAddress、InetSocketAddress、InetAddress。

客户端连接服务器端可能抛出的异常有:

java.net 类 UnknownHostException-------------无法识别的主机名字或者ip地址

java.net 类 ConnectException---------------------没有服务器进程监听指定的端口。客户端进程连接服务器端时,客户端的端口必须是被服务器监听的端口。另外,ServerSocket(int port,int backlog)构造方法的第二个参数,设定服务器的连接请求队列的长度,如果队列中的连接请求已满,服务器就会拒绝其余的连接请求。

java.net 类 SocketTimeoutException-------------连接超时

java.net 类 BindException--------------------------当前的socket对象与指定的本地ip地址不能进行绑定,就会抛出这个异常。

这四种异常都是io异常的直接或者间接子类。

 

Socket类当中常用的方法有:

getInetAddress ()  返回远程服务器的ip地址
getPort () 返回此套接字连接到的远程端口。
getLocalAddress ()   获取套接字绑定的本地地址。
getLocalPort () 返回此套接字绑定到的本地端口。
getOutputStream ()   返回此套接字的输出流。
getInputStream () 返回此套接字的输入流。

另外,socket的关闭有彻底关闭和半关闭的说法和用法。close就是彻底关闭,但是也可以半关闭。

 

设置Socket的选项:

1、setTcpNoDelay-------此值默认为false,表示采用negale算法来发送数据;negale算法是指发送方发送的数据先放入缓冲区当中,等缓冲区满了之后再发送。如果设置为true,则表示立刻发送。

2、setReuseAddress---当执行socket的close方法时,如果网络上还有发送到这个socket的数据,那么这个端口是不能被立即关闭的,而是等接收到网络上发送过来的剩余数据之后才能关闭。那么关闭之前的这段时间,这个端口就不能被另外的程序占用,比如服务器端的socket,如果当时关闭,而有很快的重启,就有可能造成启动失败。值得注意的是,此方法必须在socket没有绑定到本地端口之前来调用。

Socket sk = new Socket();

sk.setReuseAddress();.....................

3、setSoTimeOut(毫秒)----设置接收数据的等待超时时间。

4、setSoLinger(true/false,秒);------默认情况下在执行socket.close()方法时,当前socket会立即关闭,但socket的底层实际上是不会立刻关闭的,它会延迟一段时间,知道发送完所有剩余的数据,才会真正的关闭socket,断开连接。但是如果在执行socket.close()的前面执行socket.setSoLinger(true,0),那么就会立刻连底层都关闭了。

如果设定socket.setSoLinger(true,3600)----那么此时关闭的条件是:在3600秒之前发送完了所有的数据;在3600秒到了之后,数据没有发送完毕,此时强制关闭。

5、setReceiveBufferSize()

6、SetSendBufferSize()

这两个方法用于设置接收和发送数据缓冲区的大小。

7、setKeepAlive();当设置为true时,表示底层的TCP实现会实时的监控该连接是否有效。当连接处于空闲状态超过了两个小时,本地的TCP实现会发送一个数据包给远端的socket,如果远程没有相应,TCP实现就会持续尝试11分钟,知道收到相应为止。如果在12分钟内没有收到相应,TCP实现就会关闭本地socket,断开连接。

8、setOOBInline(true);表示向服务器端发送一个字节的紧急数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值