java socket 怎么获取设备tcp发送到服务器端口的心跳数据包

新手上路,请多包涵

使用百度的socketUtil能连接上,但拿不到数据,不是400就是超时

idea中Javaweb项目写main方法测试

相关代码

public class SocketUtils {

private static Logger logger = Logger.getLogger(SocketUtils.class);
/**
 * 发送socket请求
 * @param clientIp
 * @param clientPort
 * @param msg
 * @return
 */
public static synchronized String tcpPost(String clientIp,String clientPort,String msg){
    String rs = "";

    if(clientIp==null||"".equals(clientIp)||clientPort==null||"".equals(clientPort)){
        logger.error("Ip或端口不存在...");
        return null;
    }

    int clientPortInt = Integer.parseInt(clientPort);

    logger.info("clientIp:"+clientIp+" clientPort:"+clientPort);

    Socket s = null;
    OutputStream out = null;
    InputStream in = null;
    try {
        s = new Socket(clientIp, clientPortInt);
        s.setSendBufferSize(4096);
        s.setTcpNoDelay(true);
        s.setSoTimeout(60*1000);
        s.setKeepAlive(true);
        //out = s.getOutputStream();
        in = s.getInputStream();

        //准备报文msg
        //logger.info("准备发送报文:"+msg);

        //out.write(msg.getBytes("GBK"));
        //out.flush();

        byte[] rsByte = readStream(in);

        if(rsByte!=null){
            rs = new String(rsByte, "GBK");
        }


    } catch (Exception e) {
        logger.error("tcpPost发送请求异常:"+e.getMessage());
    }finally{
        logger.info("tcpPost(rs):"+rs);
        try {
            if(out!=null){
                out.close();
                out = null;
            }
            if(in!=null){
                in.close();
                in = null;
            }
            if(s!=null){
                s.close();
                s = null;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return rs;

}

/**
 * 读取输入流
 * @param in
 * @return
 */
public static byte[] readStream(InputStream in){
    if(in==null){
        return null;
    }

    byte[] b = null;
    ByteArrayOutputStream outSteam = null;
    try {
        byte[] buffer = new byte[1024];
        outSteam = new ByteArrayOutputStream();

        int len = -1;
        while ((len = in.read(buffer)) != -1) {
            outSteam.write(buffer, 0, len);
        }

        b = outSteam.toByteArray();
    } catch (IOException e) {
        logger.error("读取流信息异常"+e);
        e.printStackTrace();
    } finally{
        try {
            if(outSteam!=null){
                outSteam.close();
                outSteam = null;
            }
            if(in!=null){
                in.close();
                in = null;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return b;
}

}

读取流信息异常java.net.SocketTimeoutException: Read timed out或者tcpPost(rs):400 Bad Request然后一段400的html代码

阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题