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; }}
执行效果:
阅读全文
0 0
- Socket UDP上报读取对象
- socket udp
- socket UDP
- socket udp
- UDP Socket
- SOCKET UDP
- UDP Socket
- udp socket
- socket udp
- udp socket
- udp socket
- Socket-UDP
- UDP socket
- socket(UDP)
- socket udp
- socket udp
- udp socket
- udp socket
- win7上安装tensorflow时候遇到的那些坑
- 从mysql源码中学习程序注释技巧
- 详解 /etc/inittab 文件
- Java的面向对象思想及特征
- 1093: [ZJOI2007]最大半连通子图
- Socket UDP上报读取对象
- CNN_LSTM
- 我的第一篇博客—IT之路.ZCSDN.2017.7.7
- 欢迎使用CSDN-markdown编辑器
- 文件拖拽功能窗口实现
- python入门
- 关于RDB三范式简明易记
- 支付宝支付流程图解
- 使用RNN模拟CNN中每个卷积层的关系