运行源程序的时候总是出错,但是给的资料不会用,请问可以说下怎么解决吗
老师,为什么我的运行结果是拒绝访问呢?代码和视频里敲的是一样的呀
package bzsxt; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; /** * * @author HXZ * */ public class TestFileCopy { public static void main(String[] args) { FileOutputStream fos = null; try { fos = new FileOutputStream("C:\\a.txt"); //byte [] buf="hello world".getBytes(); fos.write(97); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(fos!=null) { fos.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
怎么我的源码不太对劲?不一样
这是视频的
这个是我自己的JDK源码
Schema不出现快捷键提示查了一下
需要导入几个文件没有咋办
老师,请问为什么上面的BufferedOutputStream将OutputStream包装了,后面PrintStream又将这个OutputStream单独包装了一次?再就是我打开BufferedOutputStream的底层源码,里面有部分方法含有sychronized关键字,是不是跟StringBuffer一样是线程安全,这样导致效率不太高,然后进行了重新包装?然后为什么又有的方法没有sychronized关键字呢?
这里i<=HIGH就可以把127放到缓存区里
老师删除最后一个元素时会报错,说超出长度范围用什么办法解决
老师,如果想设置成服务端或客户端输入"退出"时断开连接,应该把判断加在什么地方?
在发送消息线程和接收信息线程添加都尝试过,都会出现报错,提示Socket关闭
import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class ProvedChat { public static void main(String[] args) { ServerSocket serversocket = null; Socket socket = null; Scanner scanner = null; try{ scanner = new Scanner(System.in); System.out.println("请输入:server,<port> 或 ip,<port>"); String str0 = scanner.nextLine(); String[] arr = str0.split(","); if("server".equals(arr[0])){ //启动服务端 serversocket = new ServerSocket(8888); System.out.println("服务端启动,等待连接......"); socket = serversocket.accept(); System.out.println("连接成功!"); }else{ //启动客户端 socket = new Socket(arr[0],Integer.parseInt(arr[1])); System.out.println("连接成功!"); } new ProvedSend(socket,scanner).start(); new ProvedReceive(socket).start(); }catch(Exception e){ e.printStackTrace(); }finally { try{ if(serversocket!=null){ serversocket.close(); } }catch(Exception e){ e.printStackTrace(); } } } } class ProvedSend extends Thread{ private Socket socket = null; private Scanner scanner; public ProvedSend(Socket socket,Scanner scanner) { this.socket = socket; this.scanner = scanner; } @Override public void run() { this.sendMsg(); } public void sendMsg(){ PrintWriter pw = null; try{ //向客户端发送信息的对象 pw = new PrintWriter(socket.getOutputStream()); scanner = new Scanner(System.in); //开始通信 while(true){ //发送信息 String str0 = scanner.nextLine(); pw.println(str0); pw.flush(); if("退出".equals(str0)){ break; } } }catch(Exception e){ e.printStackTrace(); }finally { try { if(socket!=null){ socket.close(); } if(pw!=null){ pw.close(); } if(scanner!=null){ scanner.close(); } }catch(Exception e){ e.printStackTrace(); } } } } class ProvedReceive extends Thread{ private Socket socket = null; public ProvedReceive(Socket socket) { this.socket = socket; } @Override public void run() { this.receiveMsg(); } public void receiveMsg(){ BufferedReader br = null; try{ //向客户端发送信息的对象 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //开始通信 while(true){ //接收信息 String str0 = br.readLine(); System.out.println("客户端:"+str0); if("退出".equals(str0)){ break; } } }catch(Exception e){ e.printStackTrace(); }finally { try { if(br!=null){ br.close(); } if(socket!=null){ socket.close(); } }catch(Exception e){ e.printStackTrace(); } } } }
老师,对象的封装这个知识点我们学过吗?学过的我忘了,前面哪个知识点有,可以给下连接吗
问题:我的代码运行后,客户端向服务端发送消息后就会无限的输出”对方说:null,对着代码看过还是没找到原因,麻烦老师帮忙看看。
客户端运行情况:
代码
package com.wonderx.TCPDemo4; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * 点对点聊天的服务端 */ public class ChatSocketServer { public static void main(String[] args) { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(8888); System.out.println("服务器启动,等待监听端口8888。。。"); Socket socket = serverSocket.accept(); System.out.println("连接成功!!!"); new Send(socket).start(); new Receive(socket).start(); } catch (Exception e) { e.printStackTrace(); } finally { try { } catch (Exception e) { e.printStackTrace(); } } } } /* 发送消息的线程 */ class Send extends Thread { private Socket socket; public Send(Socket socket) { this.socket = socket; } @Override public void run() { this.sendMsg(); } /* 发送消息的方法 */ private void sendMsg() { Scanner scanner = null; PrintWriter pw = null; try { //创建Scanner对象 scanner = new Scanner(System.in); //创建向客户端发送消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while (true) { String str = scanner.nextLine(); pw.println(str); pw.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { if (scanner != null) { scanner.close(); } if (pw != null) { pw.close(); } if (socket != null) { try { socket.close(); } catch (Exception e) { e.printStackTrace(); } } } } } /* 接受消息线程 */ class Receive extends Thread { private Socket socket; public Receive(Socket socket) { this.socket = socket; } @Override public void run() { this.receiveMsg(); } /* 接收消息的方法 */ private void receiveMsg() { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); String str = br.readLine(); System.out.println("对方说:" + str); } catch (Exception e) { e.printStackTrace(); } finally { try { if (br != null) { br.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
package com.wonderx.TCPDemo4; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; /** * 点对点聊天的客户端 */ public class ChatSocketClient { public static void main(String[] args) { Socket socket = null; try { System.out.println("连接中。。。"); socket = new Socket("127.0.0.1", 8888); System.out.println("连接成功!!!"); new ClientSend(socket).start(); new ClientReceive(socket).start(); } catch (Exception e) { e.printStackTrace(); } } } /* 发送消息的线程类 */ class ClientSend extends Thread { private Socket socket; public ClientSend(Socket socket) { this.socket = socket; } @Override public void run() { this.sendMsg(); } /* 发送消息的方法 */ private void sendMsg() { Scanner scanner = null; PrintWriter pw = null; try { //创建Scanner对象 scanner = new Scanner(System.in); //创建向客户端发送消息的流对象 pw = new PrintWriter(this.socket.getOutputStream()); while (true) { String str = scanner.nextLine(); pw.println(str); pw.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { if (scanner != null) { scanner.close(); } if (pw != null) { pw.close(); } if (socket != null) { try { socket.close(); } catch (Exception e) { e.printStackTrace(); } } } } } /* 接受消息的线程类 */ class ClientReceive extends Thread { private Socket socket; public ClientReceive(Socket socket) { this.socket = socket; } @Override public void run() { this.receiveMsg(); } /* 接收消息的方法 */ private void receiveMsg() { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); while (true) { String str = br.readLine(); System.out.println("对方说:" + str); } } catch (Exception e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
import java.io.FileInputStream; import java.io.FileNotFoundException; public class test1 { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("d:/a.txt"); int s1 = fis.read(); int s2 = fis.read(); int s3 = fis.read(); int s4 = fis.read(); int s5 = fis.read(); System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println(s4); System.out.println(s5); //流对象使用完,必须关闭,不然,总占用系统资源,最终系统会崩溃。 fis.close(); } catch (Exception e) { e.printStackTrace(); } } }
97
98
99
13
10
为啥没有数据时返回的数值不是-1呢,一个13,一个10
老师,这是啥意思。
我的结果和视频里不一样,没有StringBuilder,请问老师这个是什么意思呢
问题:老师为什么我的源码和您视频里的源码不一样呢?
不是说测试StringBuffer吗?怎么还是StringBuilder?
看时间,不是刚复制那会,代码一样?是不是打错了?
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637