码迷,mamicode.com
首页 > 编程语言 > 详细

java 网络(socket)

时间:2015-06-16 16:18:30      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

本文梳理一个基础的java TCP消息通信,构造一个简单的Packet进行传输,代码如下:

  • Packet
public class Packet {
    private String attribute;
    
    public Packet(String attr){
        this.attribute = attr;
    }
    
    public String getAttribute() {
        return attribute;
    }
    public void setAttribute(String attribute) {
        this.attribute = attribute;
    }
}
  • 服务器端代码
public class App {
    
    private static final int PORT = 4000;

    public static void main(String[] args) throws IOException {
        
        ServerSocket listen = new ServerSocket(PORT);
        Socket          client = null;
        while(true){
            client = listen.accept();
            new Thread(new ServerThread(client)).start();
        }
    }
}
public class ServerThread implements Runnable{
    
    private static final int BUFSIZE  =1024;
    private Socket client = null;
    
    public ServerThread(Socket client){
        this.client = client;
    }
    
    @Override
    public void run() {
        try {
            InputStream in      = client.getInputStream();
            OutputStream out = client.getOutputStream();
             
            byte[] buffer = new byte[BUFSIZE];
                   
            while (in.read(buffer) != -1) {
                //判断包头
                if(buffer[0] == 0x01 && buffer[1] == 0x02){
                    byte[] tmp = new byte[BUFSIZE];
                    int index = 0;
                    for(int i = 2; i < buffer.length; i++){
                        tmp[index++] = buffer[i];
                    }
                    
                    Packet packet = new Packet(new String(tmp,"GB2312"));
                    
                    System.out.println(packet.getAttribute());
                }else{
                    System.out.println("消息格式不正确");
                }
            }
            
            out.close();
            in.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        }    
    }
}
  • 客户端代码
public class App {
    
    private static final int PORT = 4000;
    private static final int BUFSIZE  =1024;

    public static void main(String[] args) throws IOException {
        
        Socket client = new Socket("127.0.0.1", PORT);
        
        InputStream in      = client.getInputStream();
        OutputStream out = client.getOutputStream();
        
        Packet packet = new Packet("类型参数2345");
            
        byte[] output = new byte[BUFSIZE];
        output[0] = 0x01;
        output[1] = 0x02;
        
        int index = 2;
        //若增加包长度字段,则可实现packet的分包、组包
        byte[] tmp1 = packet.getAttribute().getBytes();
        for(int i= 0; i < tmp1.length; i++){
            output[index++] = tmp1[i];
        }
                                    
        out.write(output);
        
        byte[] buffer = new byte[BUFSIZE];
        while (in.read(buffer) != -1) {  
            System.out.println(new String(buffer, "GB2312"));
        }
        
        out.close();
        in.close();
        client.close();
            
    }
}

java 网络(socket)

标签:

原文地址:http://www.cnblogs.com/Fredric-2013/p/4580688.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!