Socket通讯工具类

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Socket通讯工具类
 */
public class SocketUtil {

    // 线程池
    private static final ExecutorService ThreadPool = Executors.newCachedThreadPool();

    /**
     * 发送Socket消息
     *
     * @param targetIP   目标IP
     * @param targetPort 目标端口
     * @param msg        消息
     * @param callback   回调
     */
    public static void sendSocketMsg(final String targetIP, final int targetPort, final byte[] msg, final SocketUtilCallback callback) {
        ThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    // 建立Socket连接
                    Socket socket = new Socket(targetIP, targetPort);
                    socket.setSoTimeout(1000 * 10);
                    // 写消息
                    OutputStream out = socket.getOutputStream();
                    out.write(msg);
                    out.flush();
                    // 读取消息返回
                    byte[] readBuffer = new byte[1024];
                    InputStream in = socket.getInputStream();
                    int size = in.read(readBuffer);
                    byte[] readBytes = null;
                    if (size != -1) {
                        readBytes = new byte[size];
                        System.arraycopy(readBuffer, 0, readBytes, 0, size);
                    }
                    // 关闭流和Socket连接
                    in.close();
                    out.close();
                    socket.close();
                    // 执行发送成功回调
                    if (callback != null && readBytes != null) {
                        callback.onSuccess(readBytes);
                    }
                } catch (IOException e) {
                    // 执行发送失败回调
                    if (callback != null) {
                        callback.onError(e);
                    }
                }
            }
        });
    }

    /**
     * 回调
     */
    public interface SocketUtilCallback {
        void onSuccess(byte[] result);

        void onError(Exception e);
    }
}

发表评论