Siahk'Blog

Later equals never.

11 Apr 2021

Socket

Socket 用法详解

1 构造 Socket

构造方法的重载方式

Socket();

Socket(InetAddress address, int port) throws UnknownHostException, IOExpection;

Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOExpection;

Socket(String host, int port) throws UnknownHostException, IOException;

Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException;

Socket(Proxy proxy);

1.1 设定等待建立连接的超时时间

Socket socket = new Socket();
SocketAddress remoteAddr=new InetSocketAddress("localhost", 8000);
socket.connect(remoteAddr, 60000); // 等待建立连接的超时时间为1分钟

SocketAddress 类 表示一个套接字地址

Socket.connect(SocketAddress endpoint, int timeout) 方法:负责连接服务器

参数endpoint:指定服务器的地址。 参数timeout:设定的超时时间,以ms为单位;设为0,表示永远不会超时。

1.2 设定服务器地址

构造方法:

// 第 1 个参数 address 表示主机的 IP 地址
Socket(InetAddress address, int port);

// 第 1 个参数 address 表示主机名字
Socket(String host, int port);

静态工厂方法——表示主机的IP地址:

// 返回本地主机的 IP 地址
InetAddress addr1 = InetAddress.getLocalHost();

// 返回代表“222.34.5.7”的 IPv4 地址
InetAddress addr2 = InetAddress.getByName("222.34.5.7");

// 返回代表“2001:DB8:2DE::E13”的 IPv6 地址
InetAddress addr3 = InetAddress.getByName("2001:DB8:2DE::E13");

// 返回主机名为“www.javathinker.net”的 IP 地址
InetAddress addr4 = InetAddress.getByName("www.javathinker.net");

1.3 设定客户端的地址

显示地设置客户端的IP地址和端口:

// 参数 localAddr 和 localPort 用来设置客户端的 IP 地址和端口

Socket(InetAddress address,int port, InetAddress localAddr, int localPort) throws IOExpection;

Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException;

构造Socket对象:

InetAddress remoteAddr = InetAddress.getByNmae("112.5.4.45");
InetAddress localAddr = InetAddress.getByName("112.5.4.3");

// 客户端使用端口 2345
Socket socket = new Socket(remoteAddr, 8000, localAddr, 2345);

1.4 客户连接服务器时可能抛出的异常

Socket的构造方法请求连接服务器时,可能出现的异常:

  • UnknownHostException:如果无法识别主机名字或IP地址,就会抛出这种异常。
  • ConnectException:如果没有没有服务器进监听指定的端口,或者服务器进程拒绝连接,就会抛出这种异常。
  • SocketTimeoutException:如果等待连接超时,就会抛出这种异常。
  • BindException:如果无法把Socket对象与指定的本地IP地址或端口半丁,就会抛出这种异常。

  • IOException
    • UnknownHostException
    • InterruptedIOException
      • SocketTimeoutException
    • SocketException
      • BindException
      • ConnectException