Socket UDP上报读取对象

来源:互联网 发布:大数据价值密度 编辑:程序博客网 时间:2024/06/05 00:40

以下用UDP发送对象展示用户登录逻辑,代码如下:

服务端代码:

public class UDPServiceObject {    public static void main(String[] args) throws ClassNotFoundException {        try {            //创建服务端DatagramSocket并指定接口            DatagramSocket socket = new DatagramSocket(8888);            //创建数据报,用于接收从客户端发送过来的数据            byte[] data = new byte[1024];            DatagramPacket datagramPacket = new DatagramPacket(data, data.length);            System.out.println("******I am is Service, wait Client input.******");            //接收客户端发送的数据            socket.receive(datagramPacket);            //System.out.println("=====" + new String(datagramPacket.getData()));            ByteArrayInputStream bInputStream = new ByteArrayInputStream(data);            ObjectInputStream oStream =new ObjectInputStream(bInputStream);            User user =  (User) oStream.readObject();            System.out.println("client say username:"+user.getUsername()+", password:"+user.getPassword());            //回复客户端对象            //组装回复的数据            ByteArrayOutputStream bOutputStream = new ByteArrayOutputStream();            ObjectOutputStream outputStream = new ObjectOutputStream(bOutputStream);            Result result = new Result(1, "login sucess.");            outputStream.writeObject(result);            byte[] outputData = new byte[1024];            outputData = bOutputStream.toByteArray();            outputStream.close();            bOutputStream.close();            //回复客户端消息            //System.out.println("hostAddress:"+socket.getInetAddress());            InetAddress address = datagramPacket.getAddress();            int port = datagramPacket.getPort();            System.out.println("address:"+address.getHostName()+",port:"+port);            DatagramPacket packet = new DatagramPacket(outputData, outputData.length, address, port);            //发送回复内容            socket.send(packet);            System.out.println("reply Client success.");                    } catch (SocketException e) {            e.printStackTrace();        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}

客户端代码:

public class UDPClientObject {    public static void main(String[] args) throws ClassNotFoundException {        try {            User user = new User("admin","123456");            //此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。            //可使用 toByteArray() 和 toString() 获取数据            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();            ObjectOutputStream stream = new ObjectOutputStream(byteArrayOutputStream);            stream.writeObject(user);            stream.flush();            stream.close();            byte[] data = new byte[1024];            data = byteArrayOutputStream.toByteArray();            byteArrayOutputStream.close();            //创建DatagramPacket,饮食将要发送的信息,包含发送的ip地址和端口号            InetAddress address = InetAddress.getByName("localhost");            int prot = 8888;            DatagramPacket packet = new DatagramPacket(data,data.length,address,prot);            //创建DatagramSocket            DatagramSocket socket = new DatagramSocket();            //发送报文内容            socket.send(packet);            System.out.println("*******I am is Client, send success.*******");            //接收服务端返回的响应内容            //System.out.println("port1:"+packet.getPort()+", port2:"+socket.getPort()+",port3:"+socket.getLocalPort());            //创建接收的pcket            byte[] replyData = new byte[1024];              DatagramPacket packet2 = new DatagramPacket(replyData,replyData.length);            socket.receive(packet2);            //System.out.println("=====" + new String(packet2.getData()));            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(replyData);            ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);            Result result = (Result)objectInputStream.readObject();            System.out.println("Service say code:"+result.getCode()+",message:"+result.getMessage());        } catch (SocketException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }           }}

两个实体类:

user.java

public class User implements Serializable {    private static final long serialVersionUID = 1L;    private String username;    private String password;    public User(String username, String password) {        super();        this.username = username;        this.password = password;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

result.java

public class Result implements Serializable {    private int code;    private String message;    public Result(int code, String message) {        super();        this.code = code;        this.message = message;    }    public int getCode() {        return code;    }    public void setCode(int code) {        this.code = code;    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }}

执行效果:

这里写图片描述
这里写图片描述

原创粉丝点击