Server.java

package com.sxt.udp.object;

import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException; import com.sxt.entity.user.User; /*
* UDP传输对象
*/
//服务端
public class Server {
public static void main(String[] args) throws Exception {
System.out.println("这是服务端,已经准备就绪!");
//创建DatagramSocket 并指定端口
DatagramSocket ds = new DatagramSocket(8888);
//创建byte为接收数据包做准备
byte[]buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//客户端DatagramSocket 接收 DatagramPacket数据包(字节)
ds.receive(dp );
//将字节数组转换成对象(反序列化)
//基类流 :内存流 读
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
//包装流 :对象流
ObjectInputStream ois = new ObjectInputStream(bais);
//内存输入流 读取对象信息
Object object = ois.readObject();
//向下转型 获取对象信息
User user = (User)object;
System.out.println("客户端的消息:"+user.getName()+" "+user.getAge());
//关socket
ds.close();
//关流
bais.close();
ois.close(); //新建发送端对象
DatagramSocket ds1 = new DatagramSocket();
//往客户端发送的数据
String message = "你的消息我已经收到!";
//将String转成byte[]数组 为装数据包做准备
byte[] buf1 = message.getBytes();
DatagramPacket dp1 = new DatagramPacket(buf1, buf1.length, InetAddress.getLocalHost(), 9999);
ds1.send(dp1 ); //关socket
ds1.close();
}
}

Client.java

package com.sxt.udp.object;

import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException; import com.sxt.entity.user.User;
//客户端
public class Client {
public static void main(String[] args) throws Exception {
//创建客户端的DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//发送的对象
User user = new User("张三", 18);
//对象流 写 对象输出流
//内存流(基类流)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//对象流(包装流 )因为传输对象
ObjectOutputStream oos = new ObjectOutputStream(baos);
//将对象写入对象流
oos.writeObject(user); //将对象转化为字节数组 因为数据包需要字节数组 该方法属于字节流 很重要!
byte[] buf = baos.toByteArray(); //将字节数组的数据放入数据包
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 8888);
//向客户端传输数据包
ds.send(dp );
//关流
ds.close(); //接收服务端的反馈消息(byte[] --> String)
//创建接收端的Socket
DatagramSocket ds1 = new DatagramSocket(9999);
//新建byte[]数组为接收数组做准备
byte[]b1 = new byte[1024];
DatagramPacket dp1 = new DatagramPacket(b1, b1.length);
//接收服务端的数据
ds1.receive(dp1);
//从数据包取数据
byte[] data = dp1.getData();
int length = dp1.getLength();
//byte[] ---> String
String message = new String(data, 0, length);
System.out.println("服务端:"+message);
//或者
System.out.println("服务端:"+new String(dp1.getData(),0,dp1.getLength()));
//关流
ds1.close();
}
}

User.java

package com.sxt.entity.user;

import java.io.Serializable;

/*
* java.io.NotSerializableException
* 所以传输对象时 对象必须序列化
* implements Serializable
* 有默认序列号
*
*/
public class User implements Serializable{
private static final long serialVersionUID = 1L;//默认序列号
private String name;
private int age;
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public User() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
} }

UDP传输对象--JavaSE考试题的更多相关文章

  1. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  2. socket通信——通过Udp传输方式,将一段文字数据发送出去

    需求:通过Udp传输方式,将一段文字数据发送出去 定义一个Udp发送端 思路: 1.建立updsocket服务 2.提供数据,并将数据封装到数据包中. 3.通过socket服务的发送功能,将数据包发出 ...

  3. java UDP传输

    ①:只要是网络传输,必须有socket . ②:数据一定要封装到数据包中,数据包中包括目的地址.端口.数据等信息. 直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对 ...

  4. AC6102 开发板千兆以太网UDP传输实验2

    AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...

  5. AC6102 开发板千兆以太网UDP传输实验

    AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...

  6. linux网络编程-(socket套接字编程UDP传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  7. 在两个Android设备间通过UDP传输目录内文件

    这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...

  8. UDP传输包大小(转)

    源:UDP传输包大小 在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一 ...

  9. Feign get接口传输对象引发一场追寻

    一个报错引发的追寻之路: Feign get接口传输对象,调用方接口代码: @FeignClient(name = "manage") public interface Acces ...

随机推荐

  1. JasperReports报表表达式12

    报表表达式是JasperReports使我们能够显示在报表上的数据计算的强大功能.计算出数据不是一个静态数据,并且不受特别的报表参数或数据源字段传递的数据.报表表达式是由组合报表参数,字段和静态数据. ...

  2. springcloud的服务提供者与服务消费者

    1.说明 springcloud中由服务消费者调用服务提供者一共有两种方法rest和feign 2.feign (1)使用feign的方式进行服务调,搭建服务提供者. 创建一个web项目(服务提供者) ...

  3. android 数据绑定(3)自动更新UI

    1.官方文档 https://developer.android.com/topic/libraries/data-binding/observability 2.observable 属性 适合对象 ...

  4. LintCode_114 不同的路径,115 不同的路径 II

    题目 有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start'). 机器人每一时刻只能向下或者向右移动一步.机器人试图达到网格的右下角(下图中标记为'Finish'). 问有多少条不同的路 ...

  5. 前端--HTML简介

    软件开发架构: c/s架构 客户端 服务端 b/s架构 浏览器 服务端 本质:b/s架构也是c/s架构 HTTP协议 超文本传输协议:规定了客户端与服务端之间消息传输的格式 四个特性: 1.基于TCP ...

  6. Linux 中查询 CPU 的核数的方法

    以一台 Linux 服务器为例.这台 Linux 包括两颗 Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz CPU, 单颗 CPU 包括 10 个 cpu core ...

  7. java-Map-system

    一 概述 0--星期日1--星期一... 有对应关系,对应关系的一方是有序的数字,可以将数字作为角标. public String getWeek(int num){ if(num<0 || n ...

  8. 洛谷P1312 [NOIP2011提高组Day1T3]Mayan游戏

    Mayan游戏 题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游 ...

  9. Nacos Committers 团队首亮相,发布 0.9.0 版本

    223 天,发布 14 个版本,19 位 Committers,39 位 Contributors. 在宣布开源后的第 223 天,Nacos 发布了其第14个版本 - 0.9.0,该版本提升了 Na ...

  10. web前端学习(二)html学习笔记部分(10)-- HTML5构建应用布局和页面

    1.2.25  HTML5构建应用布局和页面 1.2.25.1  HTML5在移动开发中的准则 1.尽量使用单页面开发 2.慎重选择前端UI框架 3.动画.特效使用准则(60fps) 浏览器消耗最小的 ...