欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

使用IO方式的简单TCP通信,iotcp通信,采用简单的通信协议“消息

来源: javaer 分享于  点击 7512 次 点评:254

使用IO方式的简单TCP通信,iotcp通信,采用简单的通信协议“消息


采用简单的通信协议“消息头(消息长度+命令字)+消息体”,完成简单的通信,采用java io方式

package cn.CodeSnippet.demo.io;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;import com.neusoft.demo.utils.Constants;import com.neusoft.transfer.Converser;/** * <pre> *  采用JAVA IO的通信客户端 * </pre> */public class ClientIo {    private Socket socket;    /**     * 初始化连接     * @throws UnknownHostException     * @throws IOException     */    private void init() throws UnknownHostException, IOException {        socket = new Socket(Constants.IO_SERVER_IP, Constants.IO_SERVER_PORT);    }    /**     *      */    public void send() {        try {            InputStream br = getReader(socket);            OutputStream pw = getWriter(socket);            byte[] response = new byte[10];            byte[] req = getRequest(0);            pw.write(req);            if (br.read(response) != -1) {                System.out.println(echoMsg(response));            }            req = getRequest(2);            pw.write(req);            if (br.read(response) != -1) {                System.out.println(echoMsg(response));            }            req = getRequest(4);            pw.write(req);            br.close();            pw.close();            socket.close();        } catch (Throwable t) {            t.printStackTrace();        }    }    private String echoMsg(byte[] response) {        StringBuilder sb = new StringBuilder();        byte[] msgLen = new byte[4];        System.arraycopy(response, 0, msgLen, 0, 4);        byte[] commandId = new byte[4];        System.arraycopy(response, 4, commandId, 0, 4);        byte[] msgBody = new byte[2];        System.arraycopy(response, 8, msgBody, 0, 2);        sb.append("msgLen:" + Converser.bytes2Int(msgLen));        sb.append(",commandId:" + Converser.bytes2Int(commandId));        sb.append(",msgBody:" + new String(msgBody));        return sb.toString();    }    /**     * 生成request     * @param commandId     * @return     */    private byte[] getRequest(int commandId) {        byte[] request = new byte[10];        System.arraycopy(Converser.int2Byte(10), 0, request, 0, 4);        switch (commandId) {        case 0:            System.arraycopy(Converser.int2Byte(commandId), 0, request, 4, 4);            System.arraycopy("dl".getBytes(), 0, request, 8, 2);            break;        case 2:            System.arraycopy(Converser.int2Byte(commandId), 0, request, 4, 4);            System.arraycopy("yw".getBytes(), 0, request, 8, 2);            break;        case 4:            System.arraycopy(Converser.int2Byte(commandId), 0, request, 4, 4);            System.arraycopy("bb".getBytes(), 0, request, 8, 2);            break;        }        return request;    }    /**     * 获得输入流     * @param socket     * @return     * @throws IOException     */    private InputStream getReader(Socket socket) throws IOException {        InputStream inputStream = socket.getInputStream();        return inputStream;    }    /**     * 获取socket输出流     * @param socket     * @return     * @throws IOException     */    private OutputStream getWriter(Socket socket) throws IOException {        OutputStream outputStream = socket.getOutputStream();        return outputStream;    }    /**     * @param args     */    public static void main(String[] args) {        ClientIo clientIo = new ClientIo();        try {            clientIo.init();            clientIo.send();        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}//该片段来自于http://byrx.net
相关栏目:

用户点评