首页 > 编程语言 >网络编程

网络编程

时间:2023-10-11 19:22:07浏览次数:40  
标签:socket 对象 编程 网络 import 服务器 字节 Socket

1、程序中每个程序都有端⼝号

  1. 80端⼝,⽹络端⼝
  2.  mysql 默认3306
  3. oracle 默认1521
  4. Tomcat 默认8080

2、模拟往服务器上传⽂件,读取客户端要上传的⽂件,保存到服务器上的硬盘,服务器给客户端发个消息,"上传成功"。

  1. 明确
    1. 数据源: 客户端上传的⽂件 客户端的硬盘上的⽂件
    2. ⽬的地: 服务器上的硬盘
  2. 服务器端实现步骤
    1.  创建一个服务器ServerSocket 对象,指定端口号
    2.  使用ServerSocket对象中的方法accept(),获取到请求的客户端对象
    3.  使用Socket对象中的方法 getInputStream,获取网络字节输入流InputStream对象
    4.  使用服务器本地的输出流FileOutputStream对象中的方法write,把读取到的文件保存到服务器硬盘上
    5.  使用Socket对象中的方法getOutputStream 获取网络字节输出流OutputStream对象
    6.  使用OutputStream中的方法write , 给客户端回复" 上传成功"
    7.  释放资源
  3. package com.socket;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    //服务器端实现步骤
    public class TCPServer {
        public static void main(String[] args) throws IOException {
            //创建一个服务器ServerSocket对象,指定端口号
            ServerSocket server=new ServerSocket(8888);
            //使用ServerSocket对象中的accept方法,获取请求的客户端对象
            Socket socket =server.accept();
            //使用Scoket对象中的getInputStream,获取网络字节输入流InputStream
            InputStream inputStream =socket.getInputStream();
            //创建一个服务器本地字节输出流FileOutputStream对象,构造方法中绑定要输出的位置
            FileOutputStream fos =new FileOutputStream("day1010/file/a.png");
            //读取文件
            int len = 0;
            byte[] bytes =new byte[1024];
            while ((len=inputStream.read(bytes))!=-1){
                //使用本地输出流,把文件保存到服务器
                fos.write(bytes,0,len);
            }
            //使用Socket对象中的方法getOutputStream,获取输出流
            //使用输出流中的write方法给客户回复“上传成功”
            socket.getOutputStream().write("上传成功".getBytes());
            //释放资源
            fos.close();
            server.close();
            socket.close();
            inputStream.close();
    
    
        }
    }

     

  4. 客户端实现步骤:读取本地⽂件,上传到服务器,读取服务器返回的数据信息。
  5. 客户端实现步骤
    1.  创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
    2.  创建一个客户端Socket对象,构造方法中绑定服务器IP地址和端口号
    3.  使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream
    4.  使用本地的字节输入流FileInputStream对象中的read读取本地的文件
    5.  使用网络字节输出流OutputStream对象中的write 把读取到的数据写入(上传)给服务器
    6.  使用Socket对象中的getInputStream获取网络字节输入流InputStream对象
    7.  使用网络字节输入流InputStream对象中的read方法读取服务返回的数据
    8.  释放资源
    9. package com.socket;
      
      import java.io.FileInputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.OutputStream;
      import java.net.Socket;
      
      public class TCPClinet {
          public static void main(String[] args) throws IOException {
              //    客户端实现步骤
      //1. 创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源
              FileInputStream fis =new FileInputStream("C:\\Users\\hsk\\Desktop\\图1.jpg");
      //2. 创建一个客户端Socket对象,构造方法中绑定服务器IP地址和端口号
              Socket socket =new Socket("192.168.110.172",8888);
      //3. 使用Socket中的方法getOutputStream,获取网络字节输出流OutputStream
              OutputStream outputStream=socket.getOutputStream();
      //4. 使用本地的字节输入流FileInputStream对象中的read读取本地的文件
              int len = 0;
              byte[] bytes =new byte[1024];
              while ((len=fis.read(bytes))!=-1){
                  //5. 使用网络字节输出流OutputStream对象中的write 把读取到的数据写入(上传)给服务器
                  outputStream.write(bytes,0,len);
              }
              //上传完成文件,给服务器一个结束标记
              socket.shutdownOutput();
      //6. 使用Socket对象中的getInputStream获取网络字节输入流InputStream对象
              InputStream inputStream =socket.getInputStream();
      //7. 使用网络字节输入流InputStream对象中的read方法读取服务返回的数据
              int len2 = 0;
              byte[] bytes2 =new byte[1024];
              while ((len2=inputStream.read(bytes2))!=-1){
      
                  System.out.println(new String(bytes2,0,len2));
              }
      //8. 释放资源
              inputStream.close();
              outputStream.close();
              fis.close();
              socket.close();
          }
      
      
      }

       

    10. 服务器优化,解决重名总是和循环接收
      package com.socket2;
      
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.net.ServerSocket;
      import java.net.Socket;
      //服务器端实现步骤
      public class TCPServer {
          public static void main(String[] args) throws IOException {
              //创建一个服务器ServerSocket对象,指定端口号
              ServerSocket server=new ServerSocket(8888);
              while (true){
                  //使用ServerSocket对象中的accept方法,获取请求的客户端对象
                  Socket socket =server.accept();
                  //使用Scoket对象中的getInputStream,获取网络字节输入流InputStream
                  InputStream inputStream =socket.getInputStream();
                  String name ="day1010/file/"+System.currentTimeMillis()+".png";
                  //创建一个服务器本地字节输出流FileOutputStream对象,构造方法中绑定要输出的位置
                  FileOutputStream fos =new FileOutputStream(name);
                  //读取文件
                  int len = 0;
                  byte[] bytes =new byte[1024];
                  while ((len=inputStream.read(bytes))!=-1){
                      //使用本地输出流,把文件保存到服务器
                      fos.write(bytes,0,len);
                  }
                  //使用Socket对象中的方法getOutputStream,获取输出流
                  //使用输出流中的write方法给客户回复“上传成功”
                  socket.getOutputStream().write("上传成功".getBytes());
                  //上传完文件,给服务器一个结束标记
                  socket.shutdownOutput();
              }
      
              //释放资源
      //        fos.close();
      //        server.close();
      //        socket.close();
      //        inputStream.close();
      
      
          }
      }

       

 

标签:socket,对象,编程,网络,import,服务器,字节,Socket
From: https://www.cnblogs.com/hsk991213/p/17757966.html

相关文章

  • 《动手学深度学习 Pytorch版》 8.5 循环神经网络的从零开始实现
    %matplotlibinlineimportmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasFfromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)#仍然使用时间机器数据集......
  • 网络基础
    背景计算机网络的诞生背景可以追溯到20世纪60年代和70年代的美国。当时,计算机的发展迅速,但是由于计算机之间缺乏互联,使得它们之间的通信和数据共享变得非常困难。在这种情况下,计算机科学家开始研究如何将计算机连接起来,以便它们可以相互通信和共享资源。这导致了计算机网络的发展......
  • 智安网络|揭开云服务的神秘面纱:其含义和功能的综合指南
    随着信息技术的不断发展,云服务已经成为了我们生活中的一个不可或缺的部分。无论是在个人生活中还是在商业领域,云服务都具有广泛的应用。什么是云服务?云服务是一种基于互联网的计算和存储资源提供方式,它允许用户通过互联网访问和使用计算资源、存储空间和应用程序,而无需拥有或维护实......
  • 【OpenJudge】NOI / 1.5编程基础之循环控制
    25:求特殊自然数总时间限制: 1000ms 内存限制: 65536kB描述一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。输入无。输出三行:第一行是此自然数的十进制表示;第二行是此自然数的七进制表示;第三......
  • 使用 KubeSkoop exporter 监测和定位容器网络抖动问题
    作者:遐宇、溪恒本文是8月17日直播的文字稿整理,文末可观看直播回放。除去文章内容外,还包括针对实际网络问题的实战环节。容器网络抖动问题发生频率低,时间短,是网络问题中最难定位和解决的问题之一。不仅如此,对Kubernetes集群内的网络状态进行日常的持续性监测,也是集群运维中很......
  • 保护隐私与增强网络安全之网络代理技术
    前言网络代理技术是一种广泛应用于互联网上的机制,用于代表客户端访问远程服务。网络代理技术可以保护隐私、增强网络安全和提高网络性能。本文将深入探讨网络代理技术的原理、类型、应用、优劣势及未来发展趋势。一、网络代理技术原理网络代理技术是通过在网络上建立代理服务器,将客......
  • 使用 KubeSkoop exporter 监测和定位容器网络抖动问题
    作者:遐宇、溪恒本文是8月17日直播的文字稿整理,文末可观看直播回放。除去文章内容外,还包括针对实际网络问题的实战环节。容器网络抖动问题发生频率低,时间短,是网络问题中最难定位和解决的问题之一。不仅如此,对Kubernetes集群内的网络状态进行日常的持续性监测,也是集群运维......
  • 安装windows11时卡在网络连接界面无法继续进行系统配置的处理方法
    1、问题描述:windows11安装后第一次开机,系统在联网界面出现如下图情况,无法继续下一步。 2.解决方法1、断电重启电脑2、按shift+F10弹出管理员命令行窗口3、输入oobe\bypassnro回车,电脑重启4、在到联网界面时,点击“我没有Internet连接选项”就可以继续进行系统设置5、进......
  • Windows打开:控制面板\网络和 Internet\网络连接 显示空白怎么办?
    Windows打开:控制面板\网络和Internet\网络连接  显示空白怎么办?最近有用户反馈遇到这个问题,问题产生原因:在卸载某个软件的时候,系统提示需要重新启动计算机,但是,启动之后,就出现了电脑不能联网,而且在控制面板\网络和Internet\网络连接中,显示为空白,正常情况下,这里面应该是有东西的......
  • RationalDMIS2023编程学习2023
    1.编程流程简介编程(1)研读图纸----配置测针方案,确定装夹方案,规划坐标系----------打开自学习-----设定模式,设定逼近回退,设定测头角度,设定坐标系,设定移动轨迹,设定输出报告。(2)打开机器2.自学习模式的开启3.模式选择在编写程序之前先要设定好,点击黑色摇杆图样图标选择模式,模式/手动模......