会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132837个问题

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



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 基础深化和提高/网络编程(旧) 2611楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2612楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2613楼

老师,提问我写的代码:

卖票程序代码如下:

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 基础深化和提高/多线程技术(旧) 2614楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 2615楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2616楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 2617楼

老师,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 基础深化和提高/容器(旧) 2619楼

客户端程序:

/**
 * 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 基础深化和提高/手写服务器项目(旧) 2620楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 2621楼

服务端启动正常,客户端启动就报错

package com.yc.server;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        System.out.println("--------服务器启动---------");
        //创建ServerSocket对象
        ServerSocket sever=new ServerSocket(10000);
        Socket socket=sever.accept();
        //获取输入流,包装成对象流
        ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
        User user=(User)ois.readObject();
        String str="";
        //对用户和密码验证
        if("name1".equals(user.getUserName())&&"123456".equals(user.getPassWord())){
            str="登陆成功";
        }else{
            str="账号密码不正确";
        }
        //获取输出流,包装成数据流
        DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
        dos.writeUTF(str);
        //关闭流
        if(dos!=null){
            dos.close();
        }
        if(ois!=null){
            ois.close();
        }
        if(socket!=null){
            socket.close();
        }
    }
}
package com.yc.test;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
public class Client {
    public static void main(String[] args) throws IOException {
        //创建Socket对象,连接服务器
        Socket client=new Socket("localhost",10000);
        //获取输出流(对象流)
        ObjectOutputStream oos=new ObjectOutputStream(client.getOutputStream());
        //创建User对象
        User u=new User("name1","123456");
        //User对象发送到服务器
        oos.writeObject(u);
        //获取输入流(数据流)
        DataInputStream dis=new DataInputStream(client.getInputStream());
        System.out.println(dis.readUTF());
        if(dis!=null){
            dis.close();
        }
        if(oos!=null){
            oos.close();
        }
        if(client!=null){
            client.close();
        }
    }
}

图片.png

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

课程分类

百战程序员微信公众号

百战程序员微信小程序

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