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 ...
随机推荐
- hbase字典顺序存储
rowkey rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据.所以 rowkey的设计是至关重要的,关系到你应用层的查询效率.我们知 ...
- 在window下远程虚拟机(centos)hadoop运行mapreduce程序
(注:虽然连接成功但是还是执行不了.以后有时间再解决吧 看到的人别参考仅作个人笔记)先mark下 1.首先在window下载好一个eclipse.和拷贝好linux里面hadoop版本对应的插件(我是 ...
- 嘴巴题3 「BZOJ1412」[ZJOI2009] 狼和羊的故事
「BZOJ1412」[ZJOI2009] 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Or ...
- JS 生成二维码和加上logo图片
参考链接:https://www.cnblogs.com/chiyi/p/5710324.html,http://www.jq22.com/jquery-info294 demo链接:demo查看 d ...
- 20190716-T1-礼物
呵呵,我暴力WA了 这个题充分考验了大家对数学的理解(麦蒙大多在胡诌) 但是确实如此啊. 看数据范围想状压.(我额嗯嗯想到暴力?) 然后设出一个可爱的$dp$式(主语当然不是我,是出题人大佬) $f_ ...
- JAVA获取磁盘空间
需要把磁盘空间显示在页面上,这样就不用去服务器查看了,方便 两个办法 File file = new File("D:"); long totalSpace = file.getT ...
- css不定高图文垂直居中的三种方法
html部分 <div class="box"> <img class="img" src="http://p2.so.qhmsg. ...
- 【CODEVS】2833 奇怪的梦境
2833 奇怪的梦境 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很 ...
- 【python之路20】函数作为参数
1.函数可以作为参数 1)函数名相当于变量指向函数 2)函数名后面加括号表示调用函数 #!usr/bin/env python # -*- coding:utf-8 -*- def f1(args): ...
- SpringMVC返回json的问题
在使用springmvc的时候,如果返回值是String, 返回一个json的字符串,在js里面接收会有问题,不能直接当成json使用,要通过eval来转成json. 就像你在js里面直接定义 var ...