UDP传输对象--JavaSE考试题
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考试题的更多相关文章
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- socket通信——通过Udp传输方式,将一段文字数据发送出去
需求:通过Udp传输方式,将一段文字数据发送出去 定义一个Udp发送端 思路: 1.建立updsocket服务 2.提供数据,并将数据封装到数据包中. 3.通过socket服务的发送功能,将数据包发出 ...
- java UDP传输
①:只要是网络传输,必须有socket . ②:数据一定要封装到数据包中,数据包中包括目的地址.端口.数据等信息. 直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对 ...
- AC6102 开发板千兆以太网UDP传输实验2
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- AC6102 开发板千兆以太网UDP传输实验
AC6102 开发板千兆以太网UDP传输实验 在芯航线AC6102开发板上,设计了一路GMII接口的千兆以太网电路,通过该以太网电路,用户可以将FPGA采集或运算得到的数据传递给其他设备如PC或服务器 ...
- linux网络编程-(socket套接字编程UDP传输)
今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...
- 在两个Android设备间通过UDP传输目录内文件
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...
- UDP传输包大小(转)
源:UDP传输包大小 在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一 ...
- Feign get接口传输对象引发一场追寻
一个报错引发的追寻之路: Feign get接口传输对象,调用方接口代码: @FeignClient(name = "manage") public interface Acces ...
随机推荐
- 利用Python覆盖图像的某一部分,即改变图形一块区域(Region)的RGBA值
原图如下: 改变过后的图如下: 查阅API写法如下: from PIL import Image from PIL import ImageDraw pilim = Image.open('1.jpg ...
- python时间处理,datetime中的strftime/strptime
python中datetime模块非常好用,提供了日期格式和字符串格式相互转化的函数strftime/strptime 1.由日期格式转化为字符串格式的函数为: datetime.datetime.s ...
- Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点
给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next; } 填充它的每个 ...
- php5.3中namespace的说明,帮助初次接触namespace的phper快速理解
命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀,但是方法名变的很长 ...
- C++怎么读入非文本文件中的内容
C++怎么读入非文本文件中的内容 3条回答 #include <io.h> #include <windows.h> void main() { char* pFileName ...
- 华为 Mate8 Emui 5.0 安卓 7.0 root 记录
步骤: 0.备份手机全部资料 1.华为官网申请解锁码 (unlock password) http://emui.huawei.com/plugin/hwdownload/download 2.关闭手 ...
- 分布式事务 XA 两段式事务 X/open CAP BASE 一次分清
分布式事务: 分布式事务是处理多节点上 的数据保持 类似传统 ACID 事物特性的 一种事物. XA:是一种协议,一种分布式事务的协议,核心思想是2段式提交. 1 准备阶段 2 提交阶段.XA协议是 ...
- 用CSS添加选中文字的背景色
- JAVA利用JXL导出/生成 EXCEL1
/** * 导出导出采暖市场部收入.成本.利润明细表 * @author JIA-G-Y */ public String exporExcel(String str) { String str=Se ...
- <a>标签操作
1.点击后onclick事件失效,变灰,不可用 onclick(this); //事件传递this对象 function viewMm(obj) { $(obj).removeAttr("o ...