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. HDFS 块

  2. Hadoop Serialization hadoop序列化详解(最新版) (1)【java和hadoop序列化比较和writable接口】

    初学java的人肯定对java序列化记忆犹新.最开始很多人并不会一下子理解序列化的意义所在.这样子是因为很多人还是对java最底层的特性不是特别理解,当你经验丰富,对java理解更加深刻之后,你就会发 ...

  3. Ubuntn16.04安装opencv3.1(特别注意环境变量)

    参考:http://lib.csdn.net/article/opencv/25737: http://blog.csdn.net/yiranyhy/article/details/72935499: ...

  4. HDU6200 mustedge mustedge mustedge

      不用看题就知道这是和什么tarjan.缩点或桥一类有关的题. 谁让他取题目叫一个mustedge还连续写3次的(哦,似乎是因为那个比赛的题目都是这个画风) 必须的边 >必须要经过的边 > ...

  5. PHP--年龄转生日、生日转年龄

    /** * 年龄转生日(模糊结果) * @parameter int age(年龄) * @parameter string symbol(分隔符) * @return string (yyyy*mm ...

  6. HTML5属性

    HTML5同时增加和废除了很多属性.下面介绍一些常用的属性. 1.表单属性 为input(type=text).select.textarea与button元素新增了autofocus属性.(它以指定 ...

  7. Leetcode653.Two Sum IV - Input is a BST两数之和4-输入BST

    给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. struct TreeNode { int val; struct TreeNode * ...

  8. Vue-- vue-preview(图片查看器)的使用步骤:

    vue-preview的使用步骤: )下载 )配置:找到配置文件加入: { test: /vue-preview.src.*?js$/, loader: 'babel-loader' }, 在处理ur ...

  9. Statement对象

    Statement 对象 创建 Statement 对象 在你准备使用 Statement 对象执行 SQL 语句之前,你需要使用 Connection 对象的 createStatement() 方 ...

  10. 【python小随笔】Django+错误日志(配置Django报错文件指定位置)

    1:  自定义日志文件.py----------几个文件需要创建日志,就需要重新定义几份 # 定义一个日志文件 创建一个操作日志对象logger file_1 = logging.FileHandle ...