会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132437个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2612楼

package com.bjsxt.client;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
 
/**
 * 客户端(做好准备与服务器端通信),以字节流作为传输方式
 * @author Administrator
 *
 */
public class TestClient {
    public static void main(String[] args) throws UnknownHostException, IOException {
        //新建socket对象
        Socket client = new Socket("127.0.0.1",9999);
         
        //新建输出流对象(因为要给服务器端发送消息,所以得有输出流对象)
        OutputStream os = client.getOutputStream();
    //  os.write("来自客户端的请求:abc".getBytes());
        os.write("来自服务器的请求:abc".getBytes());
         
        //打印一句话表明,客户端已发出请求
        System.out.println("---客户端已发出请求---");
         
        //新建输入流对象(从服务器端接收消息,所以得有输入流对象,相当于从服务器端读取内容)
        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(is!=null) {
            is.close();
        }
        if(os!=null) {
            os.close();
        }
    }
 
}

Error:(19, 32) java: 无法将类 com.sun.org.apache.xpath.internal.operations.String中的构造器 String应用到给定类型;

  需要: 没有参数

  找到: byte[],int,int

  原因: 实际参数列表和形式参数列表长度不同

老师这是什么原因呀

JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 2613楼

已经导入jaxen包了,为啥还是会出现找不包的异常,用的是IDEA

package com.zheng.TestXML;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.io.File;

public class TextXpath {
    public static void main(String[] args) throws DocumentException {
        //1) 创建 SAXReader 对象
        SAXReader reader = new SAXReader();
        //2) 调用 read 方法
        Document doc = reader.read(new File("books.xml"));
        //3)
        Node node = doc.selectSingleNode("//name");
        System.out.println("节点的名称:"+node.getName()+"节点的值"+node.getText());
    }
}

"E:\学习软件大集合\IDEA\IntelliJ IDEA 2019.3.2\jbr\bin\java.exe" "-javaagent:E:\学习软件大集合\IDEA\IntelliJ IDEA 2019.3.2\lib\idea_rt.jar=49244:E:\学习软件大集合\IDEA\IntelliJ IDEA 2019.3.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\zheng\Desktop\mycode\Process\out\production\XML;C:\Users\zheng\Desktop\mycode\Process\lib\jdom.jar;C:\Users\zheng\Desktop\mycode\Process\lib\dom4j-1.6.1.jar com.zheng.TestXML.TextXpath
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.dom4j.io.SAXContentHandler (file:/C:/Users/zheng/Desktop/mycode/Process/lib/dom4j-1.6.1.jar) to method com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser$LocatorProxy.getEncoding()
WARNING: Please consider reporting this to the maintainers of org.dom4j.io.SAXContentHandler
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
	at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
	at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
	at org.dom4j.tree.AbstractNode.selectSingleNode(AbstractNode.java:183)
	at com.zheng.TestXML.TextXpath.main(TextXpath.java:22)
Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 4 more


JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2614楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2615楼

服务端能收到信息,客户端为啥收不到信息,也没有报错



package com.zheng.net;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Testsocket {
    public static void main(String[] args) throws IOException {
        //创建socket对象
        Socket client = new Socket("169.254.148.170",9999);
        //获取输出流
        OutputStream os =client.getOutputStream();
        os.write('a');
        //获取输入流
        InputStream is = client.getInputStream();
        byte[] by= new byte[1024];
        int len = 0;
        while((len=is.read())!=-1){
            System.out.println(new String(by,0,len));
        }
        //关闭流
        if(is!=null){
            is.close();
        }
        if(os!=null) {
            os.close();
        }
        if(client!=null) {
            client.close();
        }
    }
}



java.io.IOExceptionjava.io.InputStreamjava.io.OutputStreamjava.net.ServerSocketjava.net.SocketTestSeverSockt {
    (String[] args) IOException {
        System..println()ServerSocket server = ServerSocket()Socket client = server.accept()InputStream is = client.getInputStream()System..println(()is.read())OutputStream os = client.getOutputStream()os.write(.getBytes())(os!=){
            os.close()}
        (is!=){
            is.close()}
        (client!=){
            client.close()}
    }
}


JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 2616楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2617楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2618楼

老师,提问我写的代码:

卖票程序代码如下:

public class TestLock implements  Runnable {
    private  int count=1000;
    public void run() {
            for (int i = 1; i < 2000; i++) {
                System.out.println("当前第"+i+"次出票" );
                //添加同步监视器
                synchronized (this){
                    if (count> 0) {
                        System.out.println("出第" + (count) + "张票,当前正在" + (Thread.currentThread().getName()) + "窗口买票");
                        count--;
                    }else{
                        break;
                    }
                }
            }
        }
  }

运行代码如下:

public class TestLockLock {
    public static void main(String[] args) {
        //创建线程对象
        TestLock t=new TestLock();
        //分配多个线程
        Thread t1=new Thread(t,"军人窗口");
        Thread t2=new Thread(t,"学生窗口");
        Thread t3=new Thread(t,"老师窗口");
        //就绪运行
         t1.start();
         t2.start();
         t3.start();
    }
}

运行结果如下:

        运行结果第一页:

2020-09-07_22-06-15.png

        最后一页:

2020-09-07_22-07-20.png

提问:如果我想知道第几次出票应该在类中定义出票计数器,但现在我想知道为什么我的这段代码运行会出现这种情况:为什么加同步后打印的出票次数会先打印三次?而且会出现出票次数错乱的情况?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 2619楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 2620楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2621楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 2622楼

老师,ArryList继承List接口,List继承Collection接口,使用Collection 、List、ArryList创建对象有什么区别吗,3种方式都可以实现添加数据,实现遍历,通常使用哪种方式比较合适。另外Iterator 遍历Colletction 和ArryList创建的对象可以正常输入,遍历List 创建的就报错了,为何List用for循环遍历就不报错呢?



public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();
        List<String> list3=new ArrayList<>();
        list.add("a测试");
        list.add("b测试");
        list.add("c测试");
        list2.add("a验证");
        list2.add("b验证");
        list2.add("c验证");
        list3.add("A测试");
        list3.add("B测试");
        list3.add("C测试");
        Iterator<String> it = list.iterator();
        Iterator<String> it2 = list2.iterator();
        Iterator<String> it3 = list3.iterator();
        while(it.hasNext()){
            String str=(String)it.next();
            System.out.println(str);
        }
        System.out.println("--------------");
        while(it2.hasNext()){
            String str2=it2.next();
            System.out.println(str2);
        }
        System.out.println("**************");
       for(int i=0;i<list3.size();i++){
           System.out.println(list3.get(i));
       }
    }
}

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2624楼

客户端程序:

/**
 * author mwf12
 */
package com.mwf.server;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class TestServer {
    public static void main(String[] args) throws IOException, InterruptedException {
        Socket socket = new Socket("127.0.0.1",8080);
        OutputStream outputStream = socket.getOutputStream();
        String str = "POST / HTTP/1.1\n" +
                "Host: 127.0.0.1:8080\n" +
                "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0\n" +
                "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\n" +
                "Accept-Language: zh-CN,en-US;q=0.8,zh;q=0.7,zh-TW;q=0.5,zh-HK;q=0.3,en;q=0.2\n" +
                "Accept-Encoding: gzip, deflate\n" +
                "Content-Type: application/x-www-form-urlencoded\n" +
                "Content-Length: 45\n" +
                "Connection: keep-alive\n" +
                "Upgrade-Insecure-Requests: 1\n" +
                "userName=%E5%93%88%E5%93%88%E5%93%88%E5%93%88";
        outputStream.write(str.getBytes());
        outputStream.flush();
        Thread.sleep(200000000);
        outputStream.close();
    }
}

服务器端主程序:

public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = new ServerSocket();
    serverSocket.bind(new InetSocketAddress("127.0.0.1",8080));
    Socket accept = serverSocket.accept();
    InputStream inputStream = accept.getInputStream();
    Scanner scanner = new Scanner(inputStream);
    while(scanner.hasNextLine()){
        String s = scanner.nextLine();
        System.out.println(s);
    }

}

程序运行截图

图片.png

请问老师,为什么服务端在客户端没有关闭流或套接字的情况下,服务器端不能接收最后一行数据,除了使用一次全部读取的方法外,还有什么解决方案?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2625楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637