想进大厂的废物研一狗第一天自学记录

10.30 学习总结

JAVA

  1. 问题一:
    TCP代码为什么TCP的服务端不能够收到客户端发送过来的东西,貌似是连接建立没有成功?但是客户端那里显示文件发送成功了。询问ChatGpt无果。目前还没有处理好这个问题。
    TCP的过程比UDP要复杂一些:
  • 对于客户端来说:
    1. 先创建socket,这个socket需要传入服务端的端口号以及对应的IP地址;
      • 对于socket类是通信的关键:在客户端创建socket对象,指定服务器的IP地址和端口号,
      • 也能获得对应的输入输出流
      • 服务器则使用ServerSocket在指定的端口监听客户端的连接请求
      • 当有客户端连接时,ServerSocket 会返回一个新的 Socket 对象,用于与客户端进行通信。
    2. 第二步进行文件的输入,将文件先读入内存中(即创建输入流)
    3. 第三步将刚才读入的文件输出,故先要创建输出流。由于输出的方向是朝着服务器,所以要使用socket对象中的输出流,即 getOutputStream
    4. 输出到服务器的过程即第四步,通过一个buffer数组进行传输。
    public class TcpTest2 {
    @Test
    public void client() throws IOException {
        //1创建socket
        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
        int port = 9090;
        Socket socket = new Socket(inetAddress,port);
        //2创建file实例,创建输入流,
        File file = new File("pic.png");
        FileInputStream fis = new FileInputStream(file);
        //3通过socket获得输出流
        OutputStream os = socket.getOutputStream();
        //4读写数据
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            os.write(buffer,0,len);
        }
        System.out.println("数据发送完毕");
        //接受来自服务器端
        InputStream is = socket.getInputStream();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[5];
        int len2;
        while ((len2 = is.read(buffer2)) != - 1){
            byteArrayOutputStream.write(buffer2,0,len2);
        }
        socket.shutdownOutput();
        //5关闭相关流与资源
        os.close();
        fis.close();
        socket.close();
    }
    @Test
    public void server() throws IOException{
        //1socket
        int port = 9090;
        ServerSocket serverSocket = new ServerSocket(port);
        //2使用accept方法接受来自于客户端的socket
        Socket socket = serverSocket.accept();
        //3输入流
        InputStream inputStream = socket.getInputStream();
    
        //4file实例,output实例
        File file = new File("pic_copy.png");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        //5读写数据
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != - 1){
            fileOutputStream.write(buffer,0,len);
        }
        System.out.println("数据接受完毕");
        //6服务端发送数据给客户端
        OutputStream os = socket.getOutputStream();
        os.write("很漂亮" .getBytes());
        //7关闭
        os.close();
        fileOutputStream.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
    
    • 对于服务器而言:
      1. 同样先创建关键的socket,不过服务器是ServerSocket,注意ServeSocket构造器只需要接受端口号作为初始化参数
      2. 第二步也十分关键,需要使用其 accept方法来接受对方的socket,然后以接收到的这个socket作为双方通信的桥梁。
      3. 第三步依然通过socket来创建文件的输入流
      4. 由于要把文件写到服务器上的存储中,即可以看做输入流目前在服务器的内存中,要写到本地硬盘中,所以创建文件输入流。
      5. 接下来的操作就是正常的读写数据了。
  • 所以为什么没有进行成功通信呢?
  1. 问题二:
    今天刚刚入门反射,感觉JAVA的更新一直是为了更好地便捷地去写一些代码,甚至会去”打破“自己之前的一些”死“规定。反射刚开始就对我造成了冲击,这不是跟封装的思想刚好相反吗?但是这个问题留给了明天,明天学完反射这一章节再来给自己解释。

Python
3. 问题一:
在国外的课程中貌似对于frame和enviornment这两个概念很重视,还画了许多frame框架图来解释一些复杂的嵌套环境下的运行情况。国内的教程好像没有这么讲的吧?听国外的课程对于英语听力的要求还是有点高的,毕竟自带的中文翻译还是有点抽象的,并且打开还遮住了视频底下很大一部分,观感十分不好。
4. 问题二:
其实最近比较难的就在于高阶函数Higher-Order Function和闭包这两个概念这里。慢慢嚼吧,今天已经到十一点了睡觉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值