为啥创建class出现这个了??????怎么删除这擎盾
idea怎么能像eclipse一样直接使用@Test单元注释?
不好意思,老师,不用回答了!已找到问题了!是我的逻辑问题;
老师,视频中的实体类Goods与缓冲区是在一起的,我想把缓冲区单独提出来生成一个类;
但是最后结果总是,消费线程小一次;能帮我看一下吗?我这个是逻辑问题还是哪里写错了!
Win10 eclipse jdk1.8
SX.zip
老师就是按照您的写了之后服务端一直处于开启状态啊
2021 0101---------
老师,学完服务器也没什么思想,只能照着敲,勉强看的懂,是再多学几遍还是继续往后学
老师好,以下是我的代码和实现的效果:
package com.lichen.client; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class Test { public static void main(String[] args) throws IOException { System.out.println("----------客户端已启动--------------"); //1.创建Socket对象 Socket client = new Socket("localhost", 9999); //2.创建输出流 OutputStream os = client.getOutputStream(); os.write("Do you copy?".getBytes()); //3.获取输入流 InputStream is = client.getInputStream(); //中转站 byte[] buf = new byte[1024]; int len = 0; while((len = is.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } //4.关闭流 if (is != null) { is.close(); } if (os != null) { os.close(); } if (client != null) { client.close(); } System.out.println("----------客户端已关闭--------------"); } }
package com.lichen.server; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Test { public static void main(String[] args) throws IOException { System.out.println("----------服务端已启动--------------"); //1.创建ServerSocket对象 ServerSocket sever = new ServerSocket(9999); //2.监听是否有客户端来请求链接 Socket client = sever.accept(); //3.获取输入流 InputStream is = client.getInputStream(); //中转站 byte[] buf = new byte[1024]; int len = 0; while((len = is.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); if(len < buf.length) { break; } } //4.创建输出流 //"copy that." OutputStream os = client.getOutputStream(); os.write("Copy that.".getBytes()); //5.关闭流,关闭Socket if(os != null) { os.close(); } if(is != null) { is.close(); } if(client != null) { client.close(); } System.out.println("----------服务端已关闭--------------"); } }
我的问题是:为什么服务端在读客户端发来的数据时,要加
if(len < buf.length) { break; }
这段代码,而客户端在读服务端的时候就不需要呢?
老师:
您好!什么时候用set方法,什么时候用get()方法?我对这两个不太清楚,请老师帮忙解答下,谢谢。
为什么这边不加if条件语句,麻烦这个老师讲的清楚点,前面都加,这边不加了, 也不解释下。
老师:请问新手在日常练习敲代码的时候直接了练习使用快捷键呢还是老老实实敲呢?哪一种方式更好?
13分25秒catch()中得Exception e是固定要写得还是老师随手定义个e啊
import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack<String> stack = new Stack<>(); // 将元素添加到栈 stack.push("a"); stack.push("b"); stack.push("c"); // 获取并删除栈顶元素 // String a = stack.pop(); // System.out.println(a); // String b = stack.pop(); // System.out.println(b); // String c = stack.pop(); // System.out.println(c); System.out.println(stack.size()); for (int i=0;i<=stack.size();i++){ System.out.println(stack.pop()); } } }
运行结果:
3
c
b
提问:老师这个地方为什么用for循环就只能取出2个栈顶元素啊
我输入了2,为什么能直接调用查看全纪录的toString()方法,我是在哪里打印的.
@Override public String toString() { StringBuffer sb = new StringBuffer(); sb.append("序号").append(this.id).append("#").append("\t"); sb.append("姓名").append(this.name).append("\t\t"); sb.append("年龄").append(this.age).append("\t\t"); sb.append("性别").append(this.sex).append("\t\t"); sb.append("电话号码").append(this.telNum).append("\t\t"); sb.append("地址").append(this.address); return sb.toString(); }
/* * 查询全部记录 * */ public void showAll() if (this.list.size()==0){ System.out.println("没有任何记录"); return; } for (int i= 0;i<this.list.size();i++){ System.out.println(this.list.get(i)); } }
为什么我这个生产者只生产娃哈哈 , 而且 后面的null值是怎么回事儿?
public class Goods { private String name;//商品名字 private String brand;// public Goods() { } public Goods(String name, String brand) { this.name = name; this.brand = brand; } public void setName(String name) { this.name = name; } public void setBrand(String brand) { this.brand = brand; } public String getName() { return name; } public String getBrand() { return brand; } //编写一个赋值方法,同步监视器就为当前对象 public synchronized void set(String nane ,String brand) throws InterruptedException { this.setName(name); Thread.sleep(300); this.setBrand(brand); System.out.println("生产者线程生产了:"+this.getBrand()+"---"+this.getName()); } public synchronized void get ()throws InterruptedException{ System.out.println("消费者线程取走了:"+this.getBrand()+"---"+this.getName()); } }
结果:
/** 生产者线程生产了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 消费者线程取走了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null 生产者线程生产了:娃哈哈---null Process finished with exit code 0 */
问题:
老师,这节课我是这样理解的对吗?
单次聊天有两个问题
一是不能多次进行聊天,二是只能发送消息才能接收消息
解决:
1、采用循环,客户端循环发送和接收消息,服务端循环读取客户端发送的消息
2、因为客户端发送消息和接收消息,在同一个线程,代码按照顺序执行,只能是发送消息后才能接收消息。要想解决就要创建发送消息和接收消息的线程,让它们交替执行,不发送消息也可以接收消息
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637