package fang.stu.sxt; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * 服务端 * * */ public class UdpTest01 { public static void main(String[] args) { DatagramSocket ds=null; try { //创建,服务的的监听对象; ds=new DatagramSocket(9999); //创建缓存区; byte[] bt=new byte[1024]; //创建数据报包; DatagramPacket dap=new DatagramPacket(bt, bt.length); //接收数据 System.out.println("服务端启动,准备接收数据"); ds.receive(dap); //将字节数组转换为字符串接收; String str=new String(dap.getData(),0, dap.getLength()); } catch (Exception e) { e.printStackTrace(); } finally { //关闭这个监听的对象; if (ds!=null){ ds.close(); } } } } package fang.stu.sxt; import java.io.IOException; import java.net.*; /*** * * 客户端 */ public class UdpClient01 { public static void main(String[] args) { DatagramSocket ds=null; try { //将数据类型转换为字节数组 byte[] b="王八蛋".getBytes(); //创建数据报包 DatagramPacket dp=new DatagramPacket(b,b.length, new InetSocketAddress("192.168.44.1",9999)); //创建客户端的监听对象 ds=new DatagramSocket(8088); //开始发送数据 System.out.println("客户端准备发送数据"); ds.send(dp); } catch (Exception e) { e.printStackTrace(); }finally { if (ds!=null){ ds.close(); } } } }
这个和老师讲的基本一样,都能运行,就是没有实现数据的发送
有一个疑问,目前这个项目是在项目初期直接给出了这个项目所需要的类,但是没有讲解这些类是怎么思考设计得来的,请问下,这个可以具体说一下在类的设计中,都做了什么分析和思考?
回答楼上问题,同时记录一下个人理解,无需回答
DataOutputStream 输出的为什么是乱码?明明字符也是由字节构成的;FileOutputStream同为字节流,输出就不乱码。
以字节的方式输出字符串,不会乱码。将乱码文件以utf-8的格式打开,会发现字符串部分不是乱码。
乱码的原因在于,输出其他类型时如int i = 1; 时,输出的是1对应的二进制字节,而不是'1',这样的二进制串不符合utf-8编码具有的二进制规律,故windows无法获取文件编码,以默认编码(中文系统下多为GBK)将文件打开,所以乱码。
即使全是写入字符串,以utf-8格式打开,每条字符串前方还是存在一些乱码。推测这些字节是供DateInputStream读取条目时的分隔符。
老师讲的是不是有点问题,我看了一下构造函数
public PrintWriter (Writer out) { this(out, false); } public PrintWriter(Writer out, boolean autoFlush) { super(out); this.out = out; this.autoFlush = autoFlush; }
不指定自动刷新时,PrintWriter是false,不会自动刷新的,但老师直接用的第一个构造函数,然后就说不需要flush了(课件上也这样写)。结果不出错是因为close时刷新了缓冲区。
代码:
package com.wonderx.collection; import java.util.Stack; public class TestStack { public static void main(String[] args) { //实例化栈容器 Stack<String> stack = new Stack<>(); //将元素添加到栈容器中 stack.push("a"); stack.push("b"); stack.push("c"); stack.add("add方式添加元素"); //测试这个stack容器是否为空 System.out.println(stack.empty()); //获取栈容器中顶部的元素不删除 String pek1 = stack.peek(); System.out.println(pek1); //返回元素在栈容器中的位置 System.out.println(stack.search("a")); System.out.println(stack.search("add方式添加元素")); //获取栈容器中顶部的元素并把这个元素从栈中删除 String p1 = stack.pop(); System.out.println(p1); String p2 = stack.pop(); System.out.println(p2); String p3 = stack.pop(); System.out.println(p3); //测试这个stack容器是否为空 System.out.println(stack.empty()); } }
运行结果:
问题:我测试在Stack容器中用add也能把元素添加到容器顶部,但是想知道在Stack容器中用push方式添加和用add添加元素有什么区别吗?
那应该怎么操作让开机先执行 ,我的理解可以在Programmer里面做个标志位,还有上面其他的方法吗
老师,可以直接使用char强转吗,不使用StringBuffer来添加?
老师,请问一下这个选择框是怎么弹出来的啊
之前课程中说打开了流就要关闭,否则会影响性能,但像老师这样写的话
br = new BufferedReader(new FileReader(src)); bw = new BufferedWriter(new FileWriter(des));
在括号中新建的两个流对象不就没办法关闭了吗
老师,请问一下这个画一线是表示什么意思呢
老师,在没有使用BufferedOutputStream之前,我们也要使用flush方法,这个时候清空的是哪里的缓冲区呢?是操作系统提供的缓冲区吗?如果操作系统已经为IO提供了缓冲区,那么我们再包装一层BufferedOutputStream有什么意义呢,为什么这样会提高效率?
在main里面new AB两个对象,a怎么去联合b,我看您之前回答是通过继承,那么具体实现怎么实现
老师,这个File类相比于以前直接把文件位置写入,显得更麻烦一点了,用它它有什么好处吗
老师,视频里4点53这里说,新节点挂向原来的头节点,是通过构造方法的方式挂接。
我想知道这是因为传参的方式吗,第一次定义的是形参,第二次定义的是实参,所以实参是指向形参的,达到了新节点挂向原来的头节点的目的?
我在线程里面又启动了一个线程,
为什么中间的for循环不去处理,直接出现下面的结果
程序的轮询机制是什么样子的,
一个进程里面最多容纳几个线程
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637