客户端Socket(连接是全双工的)
Socket socket = new Socket(host,port);
连接失败,抛出IOEXception异常
setSoTimeOut()方法为连接设置一个超时时间。
服务器拒绝连接,抛出ConnectEXception异常;
路由器无法确定如何将包发给服务器,则抛出NoRouteToHostException异常;
连接服务器期间,服务器挂起,抛出SocketTimeOutException异常。
getOutputStream()请求输出流
向Socket另一端发送数据。
半关闭Socket
close()关闭Socket的输入和输出;
shutdownInput()关闭输入
shutdownOutput()关闭输出
关闭输入之后再读取输入流会返回-1,关闭输出之后再写入Socket会抛出一个IOException异常
半关闭连接后,最终还是要close()关闭Socket;
isInputShutdown()确定是否关闭输入流;
isOutputShutdown()确定是否关闭输出流;
构造和连接Socket
每个Socket构造函数指定要连接的主机和端口。
主机可以指定为InetAddress和String。
远程端口指定为1到65535之间到int值。
域名服务器无法解析这个主机名或域名服务器没有运行,这个构造函数会抛出UnknownHostException异常。
其他原因未能打开Socket,抛出IOException异常。
选择从哪个本地接口连接
Socket(String host, int port,InetAddress interface, int localPort)
后两个参数指定的本地网络连接接口和端口。
构造但不连接
Socket()无参数创建
connect(SocketAddress,int)为此方法传入SocketAddress建立连接。
可以有第二个参数来设置等待时间。
Socket地址
SocketAddress类的主要目的就是为了暂时连接的socket信息提供一个存储;
getRemoteSocketAddress()返回所连接系统的地址;
getLocalSocketAddress()返回发起连接的地址;
如果socket没有连接,返回null;
InetSocketAddress类创建的两种方式:
InetSocketAddress(host,port)
InetSocketAddress(port)
InetSocketAddress.createUnresolved(host, port)静态工厂方法,不在DNS中查找主机
获取方法:
getAddress();
getPort();
getHostName();
获取Socket信息
getInetAddress();
getPort();
getLocalAddress();
getLocalPort();
关闭还是连接
isClosed()关闭返回ture,否则false;
isConnected()指出Socket是否从未连接过一个远程主机。连接过返回true;
isBound()Socket是否成功地绑定到本地系统上的出站端口。
isConnected()远程断,isBound()本地端
toString()获取Socket完整信息