java实现基于TCP的socket通信实例(客户端)

**

这里主要介绍客户端实现,主要分四步:

**
1.创建socket对象,并指定服务器的地址和端口
2.建立链接后,通过输入输出流写入请求信息
3.通过输入输出流获取服务端返回的信息
4.关闭相关资源

下面是相关代码:

public class TcpClientService {

    private static final Log LOG = LogFactory.getLog(TcpClientService.class);
    //从配置文件获取服务端地址和端口
    private static final String TCP_ADDRESS = PropertiesUtil.getProperty("tcp.address");
    private static final String TCP_PORT = PropertiesUtil.getProperty("tcp.port");

    public static String sendRequest(String request) throws IOException {
        String response = "";
        StringBuilder sb = new StringBuilder();
        Socket socket = null;
        PrintWriter pWriter = null;
        OutputStream outputStream = null;
        OutputStreamWriter oWriter = null;
        InputStream inputStream = null;
        BufferedReader bReader = null;
        try {
            LOG.info("=====+++++===发送的IP和端口===+++++++===");
            LOG.info("URL is " + TCP_ADDRESS  + ":" + TCP_PORT);
            //创建socket对象并指定服务端地址和端口
            socket = new Socket(TCP_ADDRESS, Integer.parseInt(TCP_PORT));
            //打开输入输出流
            outputStream = socket.getOutputStream();
            pWriter = new PrintWriter(outputStream);
            oWriter = new OutputStreamWriter(outputStream, "UTF-8");
            String sendString = request;
            int num = sendString.getBytes("UTF-8").length;
            String tString = null;
            tString = String.format("%0" + 8 + "d", num);
            oWriter.write(tString + sendString);
            oWriter.flush();
            LOG.info(tString + sendString);
            //关闭输出流
            socket.shutdownOutput();
            // 返回报文
            inputStream = socket.getInputStream();
            //在缓冲区内包装字符流以提高效率
            bReader = new BufferedReader(new InputStreamReader(inputStream,
                    "UTF-8"));
            String tmp = "";
            while ((tmp = bReader.readLine()) != null) {
                sb.append(tmp);
            }
            response = sb.toString();
            LOG.info("=====++++返回的报文如下:++++=====" + response);
            socket.shutdownInput();
        } catch (UnknownHostException e) {
            // TODO: handle exception
            LOG.error("UnknownHostException", e);
        } catch (IOException e) {
            // TODO: handle exception
            LOG.error("IOEXception", e);
        } 
        //关闭相关资源
        finally {
            if (bReader != null) {
                bReader.close();
            }
            if (inputStream != null) {
                inputStream.close();/**/
            }
            if (pWriter != null) {
                pWriter.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
            if (socket != null) {
                socket.close();
            }
        }
        // 截取返回报文中的字符数统计
        response = response.substring(8);
        return response;
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值