UDP通讯的实现1.DatagramSocket:用于发送或接收数据包当服务器要向客户端发送数据时,需要在服务器端产生一个DatagramSocket对象,在客户端产生一个DatagramSocket对象。服务器端的DatagramSocket将DatagramPacket发送到网络上,然后被客户端的DatagramSocket接收。DatagramSocket有两种构造函数。一种是无需任何参数的,常用于客户端。另一种需要指定端口,常用于服务器。常用方法:send、receive、 close2.DatagramPacket:数据容器(封包)的作用常用方法:构造函数、getAddrress(获取发送或接收方计算机的IP地址)、getData(获取发送或接收的数据)、setData(设置发送的数据)3.UDP通信编程基本步骤:a)创建客户端的DatagramSocket,创建时,定义客户端的监听端口b)创建服务器端的DatagramSocket,创建时,定义服务器端的监听端口c)在服务器端定义DatagramPacket对象,封装待发送的数据包。d)服务器端将数据包发送出去e)客户端接收数据包【示例1】客户端与服务器端单向通信之客户端importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetSocketAddress;publicclassClient {publicstaticvoidmain(String[] args)throws Exception {byte[] b = “aaaa”.getBytes(); //必须告诉数据包要发到哪里去 DatagramPacket dp =newDatagramPacket(b,b.length,new InetSocketAddress(“localhost”,8999));//我本身占用9000端口向外面机器发数据包 DatagramSocket ds =newDatagramSocket(9000); ds.send(dp); ds.close(); }}【示例2】客户端与服务器端单向通信之服务器端
importjava.net.DatagramPacket;importjava.net.开发云主机域名DatagramSocket;publicclassServer {publicstaticvoidmain(String[] args)throws Exception { DatagramSocket ds =newDatagramSocket(8999);byte[] b =newbyte[1024]; DatagramPacket dp =newDatagramPacket(b,b.length); ds.receive(dp);//阻塞式方法 String string =new String(dp.getData(),0,dp.getLength()); //dp.getLength()返回实际收到的数据的字节数 System.out.println(string); ds.close(); }}通过ByteArrayInputStream、ByteArrayOutputStream可以传递基本类型数据。【示例3】客户端publicclassClient {publicstaticvoidmain(String[] args)throws Exception {longn = 2000L; ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); dos.writeLong(n); byte[] b = bos.toByteArray(); //必须告诉数据包要发到哪里去 DatagramPacket dp =newDatagramPacket(b,b.length,new InetSocketAddress(“localhost”,8999)); //我本身占用9000端口向外面机器发数据包 DatagramSocket ds =newDatagramSocket(9000); ds.send(dp); ds.close(); }}【示例4】服务器端publicclassServer {publicstaticvoidmain(String[] args)throws Exception { DatagramSocket ds =newDatagramSocket(8999);byte[] b =newbyte[1024]; DatagramPacket dp =newDatagramPacket(b,b.length); ds.receive(dp);//阻塞式方法ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData()); DataInputStream dis = new DataInputStream(bis); System.out.println(dis.readLong()); ds.close();}}通过ByteArrayInputStream、ByteArrayOutputStream可以传递对象。【示例5】Person类(客户端与服务器端都需要存在Person类)classPersonimplementsSerializable{intage; String name;publicPerson(intage, String name) {super();this.age = age;this.name = name; }}【示例6】客户端publicclassClient {publicstaticvoidmain(String[] args)throws Exception { Person person =newPerson(20,”aa”);ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(person); byte[] b = bos.toByteArray(); //必须告诉数据包要发到哪里去 DatagramPacket dp =newDatagramPacket(b,b.length,new InetSocketAddress(“localhost”,8999)); //我本身占用9000端口向外面机器发数据包 DatagramSocket ds =newDatagramSocket(9000); ds.send(dp); ds.close(); }} 【示例7】服务器端
publicclassServer {publicstaticvoidmain(String[] args)throws Exception { DatagramSocket ds =newDatagramSocket(8999);byte[] b =newbyte[1024]; DatagramPacket dp =newDatagramPacket(b,b.length); ds.receive(dp); //阻塞式方法ByteArrayInputStream bis = new ByteArrayInputStream(dp.getData()); ObjectInputStream ois = new ObjectInputStream(bis); Person person = (Person) ois.readObject(); System.out.println(person.name); ds.close(); }}
「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。
笔记包含从浅入深的六大部分:A-Java入门阶段B-数据库从入门到精通C-手刃移动前端和Web前端D-J2EE从了解到实战E-Java高级框架精解F-Linux和Hadoop
今天小编就为大家带来一篇介绍vim退出命令的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。vim命令::w 保存文件但不退出vim:w file 将修改另外保存到file中,不退出vim:w! 强制保存,不退出vim:wq 保存文件并…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。