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. k8s(openshift) 部署istio1.1

    准备工作: openshift 默认不允许UID为0的容器运行,要先授权scc以便安装istio # oc adm policy add-scc-to-user anyuid -z istio-ing ...

  2. hadoop面试题及答案解析

    1.(Datanode)程序负责HDFS数据存储. 2.HDFS中的block默认保存(3份). 3.(TaskTracker)程序通常与NameNode在一个节点启动. 分析:hadoop集群是基于 ...

  3. Javascript-简单的倒计时跳转页面

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. Oracle中函数如何返回结果集

    在Oracle中,用函数返回结果集有时候要用到,下面是demo: 1 2 3 4 5 6 7 create or replace type t_test as object ( id integer, ...

  5. FreeMarker 对null值的处理技巧

    以下引用官方描述: ? The FreeMarker template language doesn't know the Java language null at all. It doesn't ...

  6. 2019.8.1 NOIP模拟测试11 反思总结

    延迟了一天来补一个反思总结 急匆匆赶回来考试,我们这边大家的状态都稍微有一点差,不过最后的成绩总体来看好像还不错XD 其实这次拿分的大都是暴力[?],除了某些专注于某道题的人以及远程爆踩我们的某学车神 ...

  7. 2019-4-16-C#-在-8.0-对比-string-和-string_-的类型

    title author date CreateTime categories C# 在 8.0 对比 string 和 string? 的类型 lindexi 2019-04-16 10:16:56 ...

  8. Python实例 分割路径和文件名

    import  os.path # 常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名. # 根据你机器的实际情况修改下面参数. spath = " D: ...

  9. tomcat标准化安装

    操作系统说明: 操作系统 版本 linux red hat release 6.4 关键软件包说明: 软件包 版本 目录 运行用户 jdk-7u79-linux-x64.gz 1.7 /usr/loc ...

  10. Intellij IDEA 创建资源文件夹 source folder

    [转载]原文链接:https://blog.csdn.net/u014723529/article/details/78050725 之前用 eclipse 新建有一个 source folder , ...