java socket通信总结笔记2——Socket和ServerSocket

12 篇文章 0 订阅
7 篇文章 0 订阅

Socket类(用于阻塞式传输数据)

Socket(String host, int port, InetAddress localAddr, int localPort),Socket(InetAddress addr, int port, InetAddress localAddr, int localPort):创建连接到host/addr主机port端口,且绑定到本机localAddr地址localPort端口的socket(一台主机可能同时连到好几个局域网,在每个局域网中都有一个IP地址)。

Socket(String host, int port),Socket(InetAddress addr, int port):创建连接到host/addr主机port端口,且绑定到本机机选IP和端口的socket.

Socket():创建一个未连接未绑定的socket.

凡是连接到远程端口的构造函数,在连上之前都会一直阻塞。

void connect(SocketAddress endpoint):连接到endpoint端口,连上之前会一直阻塞。如果本socket尚未绑定,则绑定到机选IP和端口。

void connect(SocketAddress endpoint, int timeout):连接到endpoint端口,最多等待timeout毫秒。如果timeout等于0,则一直阻塞直到连上为止。如果本socket尚未绑定,则绑定到机选IP和端口。

void bind(SocketAddress bindpoint):绑定到本机的bindpoint端口,如果bindpoint是null,则机选IP和端口。

boolean isConnected():如果本socket已连接到远程端口,则返回true.

boolean isBound():如果本socket已成功绑定,则返回true.

SocketAddress getRemoteSocketAddress():返回远程端口地址。若尚未连接到远程端口,则返回null.

InetAddress getInetAddress():返回远程计算机的IP地址。如果尚未连接到远程端口,则返回null.

int getPort():返回远程端口号。如果尚未连接到远程端口,则返回0.

SocketAddress getLocalSocketAddress():返回本地端口地址。若尚未绑定,则返回null.

InetAddress getLocalAddress():返回本机所采用的IP地址。

int getLocalPort():返回绑定到的本机端口号。若尚未绑定,则返回-1.

SocketChannel getChannel():返回本socket所关联的SocketChannel.如果没有,则返回null.由SocketChannel得到的socket才会有SocketChannel.

InputStream getInputStream():返回本socket的输入流。将来从这个流中读取远程传来的数据。

OutputStream getOutputStream():返回本socket的输出流。将来往这个流里写送给远程的数据。

void sendUrgentData(int data):发送一个紧急数据字节。发送的字节是data的低8位。

void close():关闭本socket,本socket的输入输出流,以及本socket所对应的SocketChannel.

void shutdownInput():将本socket输入流的当前位置至于流末尾,并且以后由远程发来的数据都将被确认然后静默丢弃。可见,shutdownInput之后再read的话就会读到EOF,read函数会返回-1.

void shutdownOutput():以前写入本socket输出流的数据都将被发送出去,从此不准再往流里放数据。对方从输入流读完shutdownOutput之前的数据后,就会遇到流末尾。

boolean isClosed():如果本socket已经关闭,则返回true.

boolean isInputShutDown():如果本socket的输入流已经被shutdown,则返回true.

boolean isOutputShutDown():如果本socket的输出流已经被shutdown,则返回true.

void setTcpNoDelay(boolean on),boolean getTcpNoDelay():默认情况下发往远程的数据会先存在缓冲区中,等缓冲区满了再一并发送,这叫Negale算法。如果每次只发送少量数据,又想让远程及时响应,可以开启TCP_NODELAY,数据不进缓冲区直接发。

void setSendBufferSize(int size),int getSendBufferSize():设置/返回底层缓冲区的大小,大小不能为0.

void setReceiveBufferSize(int size),int getReceiveBufferSize():设置/返回底层缓冲区的大小,大小不能为0.

void setSoTimeout(int timeout),int getSoTimeout():默认情况下读输入流时会一直阻塞到读够为止,这里可以设置超时为timeout毫秒。如果timeout等于0,则是禁用超时。禁用超时时getSoTimeout函数返回0.

void setSoLinger(boolean on, int linger),int getSoLinger():默认情况下关闭socket时会立即关闭立即返回,如果开启了SO_LINGER,则会等底层把没法完的数据都发完了才会关闭返回。最多等待linger秒,超时之后还没发完的数据将被丢弃。如果没开起SO_LINGER,getSoLinger将返回-1.

void setReuseAddress(boolean on),boolean getReuseAddress():默认情况下关闭socket时本地端口不会立即释放,而是等待并静默丢弃延迟传来的数据后再释放,以防下次绑定到这个端口的进程收到旧数据。但是这会导致这个端口在socket关闭后一段时间内无法绑定。如果希望socket关闭之后本地端口可以立刻重用,则新旧进程都要在socket绑定之前开启SO_REUSEADDR.

void setTrafficClass(int tc),int getTrafficClass():对通信质量提出要求。参数tc是一些要求的位或(|),要求包括四种:低成本(0x02),高可靠性(0x04),高吞吐率(0x08),小延迟(0x10).

void setPerformancePreferences(int connectionTime, int latency, int bandwidth):设置短连接时间、低延迟和高带宽的相对重要性。三个参数的绝对值没有意义,相对大小才有意义,最大的表示最看重,最小的表示最无所谓。此设置必须在连接远程端口之前进行。

void setKeepAlive(boolean on),boolean getKeepAlive():默认情况下底层不会监视TCP连接的有效性。开启了SO_KEEPALIVE后,底层会监视TCP连接,一旦发现长期空闲的连接,就会自动把它断开。

void setOOBInline(boolean on),boolean getOOBInline():默认情况下收到紧急数据字节时会静默丢弃,如果想接收,可以开启OOBINLINE,但即便是这样,如果没有更高层的协议,接收方也无法区分紧急数据和普通数据,只能以同样的方式来处理它们。


ServerSocket类(用于阻塞式侦听连接)

ServerSocket(int localPort, int backlog, InetAddress localAddr):创建绑定到本机localAddr地址localPort端口,连接请求队列长backlog的serversocket.localPort为0时,机选端口号。连接请求队列已满时,拒绝新的连接请求。

ServerSocket(int port),ServerSocket(int port, int backlog):localAddr缺位时,机选本机IP.|backlog缺位时,连接请求队列长度为默认值50.

ServerSocket():创建未绑定的serversocket.

void bind(SocketAddress bindpoint, int backlog):绑定到bindpoint端口,连接请求队列长度设为backlog。如果bindpoint为null,则机选本机IP和端口。

void bind(SocketAddress bindpoint):同上,只是连接请求队列长度采用默认值。

boolean isBound():如果成功地绑定了,则返回true.

SocketAddress getLocalSocketAddress():返回绑定的端口的地址,若尚未绑定则返回null.

InetAddress getInetAddress():返回绑定的本机IP,若尚未绑定则返回null.

int getLocalPort():返回绑定的端口号,若尚未绑定则返回-1.

ServerSocketChannel getChannel():返回本serversocket所关联的ServerSocketChannel.只有通过ServerSocketChannel获得的socket才有ServerSocketChannel.

Socket accept():阻塞式侦听连接请求,返回请求者的socket.

void close():关闭serversocket,所有阻塞在本serversocket的accept函数的进程都会抛出SocketException.

boolean isClosed():如果本serversocket已经关闭,则返回true.

void setSoTimeout(int timeout),int getSoTimeout():默认情况下accept函数如果没有请求者会一直阻塞,这里可以设置超时为timeout毫秒。如果timeout等于0,则禁用超时。禁用超时时getSoTimeout函数返回0.

void setReuseAddress(boolean on),boolean getReuseAddress():默认情况下关闭serversocket后被绑定的本地端口不会立即释放,而是等待并静默丢弃延迟传来的给serversocket的数据后再释放,以防下次绑定到这个端口的进程收到旧数据。但是这会导致这个端口在serversocket关闭后一段时间内无法绑定。如果希望serversocket关闭后端口可以立刻重用,则新旧进程都应在绑定之前开启SO_REUSEADDR.

void setReceiveBufferSize(int size),int getReceiveBufferSize():设置/返回本serversocket所接受的所有socket的底层接收缓冲区大小,大小不能为0.如果要设成大于64K的值,就必须在绑定之前set.

void setPerformancePreferences(int connectionTime, int latency, int bandwidth):设置短连接时间、低延迟和高带宽的相对重要性。参数的相对大小才有意义,绝对值无意义。此设置必须在绑定之前进行。









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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值