diff --git a/CHANGELOG.md b/CHANGELOG.md
index 17518bbfd..1fb7da2fe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,7 @@
-------------------------------------------------------------------------------------------------------------
-# 5.7.8 (2021-08-10)
+# 5.7.8 (2021-08-11)
### 🐣新特性
* 【core 】 MapProxy支持return this的setter方法(pr#392@Gitee)
@@ -12,6 +12,7 @@
* 【json 】 增加JSONBeanParser
* 【poi 】 增加CellSetter,可以自定义单元格值写出
* 【poi 】 CsvReader增加readFromStr(pr#1755@Github)
+* 【socket 】 SocketUtil增加connection方法
### 🐞Bug修复
* 【core 】 改进NumberChineseFormatter算法,补充完整单元测试,解决零问题
diff --git a/hutool-socket/src/main/java/cn/hutool/socket/SocketUtil.java b/hutool-socket/src/main/java/cn/hutool/socket/SocketUtil.java
index 7fb601caf..9d10163eb 100644
--- a/hutool-socket/src/main/java/cn/hutool/socket/SocketUtil.java
+++ b/hutool-socket/src/main/java/cn/hutool/socket/SocketUtil.java
@@ -1,24 +1,26 @@
package cn.hutool.socket;
+import cn.hutool.core.io.IORuntimeException;
+
import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
import java.net.SocketAddress;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.ClosedChannelException;
-import cn.hutool.core.io.IORuntimeException;
-
/**
* Socket相关工具类
- *
+ *
* @author looly
* @since 4.5.0
*/
public class SocketUtil {
-
+
/**
* 获取远程端的地址信息,包括host和端口
* null表示channel为null或者远程主机未连接
- *
+ *
* @param channel {@link AsynchronousSocketChannel}
* @return 远程端的地址信息,包括host和端口,null表示channel为null或者远程主机未连接
*/
@@ -36,11 +38,61 @@ public class SocketUtil {
/**
* 远程主机是否处于连接状态
* 通过判断远程地址获取成功与否判断
- *
+ *
* @param channel {@link AsynchronousSocketChannel}
* @return 远程主机是否处于连接状态
*/
public static boolean isConnected(AsynchronousSocketChannel channel) {
return null != getRemoteAddress(channel);
}
+
+ /**
+ * 创建Socket并连接到指定地址的服务器
+ *
+ * @param hostname 地址
+ * @param port 端口
+ * @return {@link Socket}
+ * @throws IORuntimeException IO异常
+ * @since 5.7.8
+ */
+ public static Socket connect(String hostname, int port) throws IORuntimeException {
+ return connect(hostname, port, -1);
+ }
+
+ /**
+ * 创建Socket并连接到指定地址的服务器
+ *
+ * @param hostname 地址
+ * @param port 端口
+ * @param connectionTimeout 连接超时
+ * @return {@link Socket}
+ * @throws IORuntimeException IO异常
+ * @since 5.7.8
+ */
+ public static Socket connect(final String hostname, int port, int connectionTimeout) throws IORuntimeException {
+ return connect(new InetSocketAddress(hostname, port), connectionTimeout);
+ }
+
+ /**
+ * 创建Socket并连接到指定地址的服务器
+ *
+ * @param address 地址
+ * @param connectionTimeout 连接超时
+ * @return {@link Socket}
+ * @throws IORuntimeException IO异常
+ * @since 5.7.8
+ */
+ public static Socket connect(InetSocketAddress address, int connectionTimeout) throws IORuntimeException {
+ final Socket socket = new Socket();
+ try {
+ if (connectionTimeout <= 0) {
+ socket.connect(address);
+ } else {
+ socket.connect(address, connectionTimeout);
+ }
+ } catch (IOException e) {
+ throw new IORuntimeException(e);
+ }
+ return socket;
+ }
}