zoukankan      html  css  js  c++  java
  • 网络编程3--毕向东java基础教程视频学习笔记

    Day24

    01 TCP上传图片
    02 客户端并发上传图片
    03 客户端并发登录
    04 浏览器客户端-自定义服务端
    05 浏览器客户端-Tomcat服务端

     

    01 TCP上传图片

     1 import java.net.*;
     2 import java.io.*;
     3 class PicClient  
     4 {
     5     public static void main(String[] args) throws Exception
     6     {
     7         Socket s=new Socket("127.0.0.1",10007);
     8         FileInputStream fis=new FileInputStream("E:\图\素材\头像.jpg");
     9         OutputStream os=s.getOutputStream();
    10         byte[] buf=new byte[1024*16];
    11         int len;
    12         while((len=fis.read(buf))!=-1)
    13         {
    14             os.write(buf,0,len);
    15         }
    16         //告诉服务器数据写入完毕
    17         s.shutdownOutput();
    18         InputStream is=s.getInputStream();
    19         byte[] bufIn=new byte[1024];
    20         int num=is.read(bufIn);
    21         System.out.println(new String(bufIn,0,num));
    22         
    23         fis.close();
    24         s.close();
    25     
    26     }
    27 }
    28 class  PicServer 
    29 {
    30     public static void main(String[] args) throws Exception
    31     {
    32         ServerSocket ss=new ServerSocket(10007);
    33         Socket s=ss.accept();
    34         System.out.println(s.getInetAddress().getHostAddress()+"......connected");
    35         InputStream in=s.getInputStream();
    36         byte[] buf=new byte[1024*16];
    37         FileOutputStream fos=new FileOutputStream("touxiang.jpg");
    38         int len;
    39         while((len=in.read())!=-1)
    40         {
    41             fos.write(buf,0,len);
    42         }
    43         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    44         out.println("图片上传成功!");
    45 
    46         fos.close();
    47         s.close();
    48         ss.close();
    49         
    50     }
    51 }
    View Code

     


    02 客户端并发上传图片

    服务端如果只有当为一个客户端服务完成后,才能为别的客户端服务,效率就太低了,所以服务端需要采用多线程。

    一个客户端请求连接,服务端就开启一个线程为他服务。这样可以实现客户端并发上传图片。

    实现代码如下:

      1 /*
      2 
      3 */
      4 import java.net.*;
      5 import java.io.*;
      6 class PicClient 
      7 {
      8     public static void main(String[] args) throws Exception
      9     {
     10         //判断要上传的文件是否符合要求,不符合则结束运行
     11         File file=new File(args[0]);
     12         if(args.length!=1)
     13         {
     14             System.out.println("请上传一个文件,而不是多个!");
     15             return;
     16         }
     17         if(!(file.exists() && file.isFile()))
     18         {
     19             System.out.println("文件不存在,或者文件有问题。");
     20             return;
     21         }
     22         if(!(file.getName().endsWith(".png")))
     23         {
     24             System.out.println("请上传一个png格式的文件。");
     25             return;
     26         }
     27         if(file.length()>1024*9)
     28         {
     29             System.out.println("上传文件大小超过允许范围!");
     30             return;
     31         }
     32 
     33         //建立Socket服务
     34         Socket s=new Socket("172.29.115.1",10008);
     35         //读取一个图片文件
     36         FileInputStream fis=new FileInputStream(file);
     37         byte[] buf=new byte[1024*9];
     38         OutputStream out=s.getOutputStream();
     39         int len=0;
     40         //写入socket输出流中
     41         while((len=fis.read(buf))!=-1)
     42         {
     43             out.write(buf,0,len);
     44 
     45         }
     46         //给服务端一个信号,客户端输出结束
     47         s.shutdownOutput();
     48         
     49         //接受服务端的回馈信息
     50         InputStream in=s.getInputStream();
     51         byte[] b=new byte[1024];
     52         int num=in.read(b);
     53         System.out.println("server:"+new String(b,0,num));
     54 
     55         //关闭资源
     56         fis.close();
     57         s.close();
     58 
     59         
     60     }
     61 }
     62 class  PicServerThread implements Runnable
     63 {
     64     private Socket s;
     65     public PicServerThread(Socket s)
     66     {
     67         this.s=s;
     68     }
     69     public void run()
     70     {
     71         try
     72         {
     73             int count=1;
     74         String ip=new String(s.getInetAddress().getHostAddress()+"");
     75         System.out.println(ip+"......connected");
     76         File file=new File(ip+"("+count+")");
     77         //如果文件名已经存在,通过增加序号,定义新名字
     78         //循环进行判断,直到找到没用过的文件名
     79         while(file.exists())
     80             file=new File(ip+"("+(count++)+")"+".png");
     81 
     82         InputStream in=s.getInputStream();
     83         FileOutputStream fos=new FileOutputStream(file);
     84         
     85         byte[] buf=new byte[1024*9];
     86         int len;
     87         //读取数据并写入到文件中
     88         while((len=in.read(buf))!=-1)
     89         {
     90             fos.write(buf,0,len);
     91         }
     92 
     93         //向客户端发送提示信息
     94         PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
     95         pw.println("上传成功!");
     96 
     97         //关闭资源
     98         fos.close();
     99         s.close();
    100         
    101 
    102             
    103         }
    104         catch (Exception e)
    105         {
    106             throw new RuntimeException("服务建立失败!");
    107         }
    108         
    109     }
    110 
    111     
    112 }
    113 class  PicServer
    114 {
    115     public static void main(String[] args) throws Exception
    116     {
    117     
    118         //建立服务
    119         ServerSocket ss=new ServerSocket(10008);
    120         while(true)
    121         {
    122             //接收客户端端口
    123         Socket s=ss.accept();
    124         new Thread(new PicServerThread(s)).start();
    125 
    126         }
    127     
    128     }
    129 }
    View Code

     


    03 客户端并发登录

    客户端通过键盘录入用户名,服务端对这个用户名进行校验。
    如果该用户存在,在服务端显示XXX,已登录。
    并在客户端显示,XXX欢迎登陆。

    如果该用户不存在,在服务端显示XXX,尝试登陆。
    并在客户端显示,XXX,该用户不存在。

    最多只能尝试登陆三次。

      1 import java.net.*;
      2 import java.io.*;
      3 class LoginClient 
      4 {
      5     public static void main(String[] args)throws Exception 
      6     {
      7         //建立服务
      8         Socket s=new Socket("127.0.0.1",10008);
      9         //获得键盘录入
     10         BufferedReader bufr=
     11             new BufferedReader(new InputStreamReader(System.in));
     12         //获得socket对应的输出流,设置为自动刷新
     13         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
     14 
     15         //获得socket对应的输入流
     16         BufferedReader in=
     17             new BufferedReader(new InputStreamReader(s.getInputStream()));
     18         //最多只能尝试登陆三次
     19         for(int x=0;x<3;x++)
     20         {
     21             String name=bufr.readLine();
     22             //如果键盘录入为空(按下CTRL+C),循环结束
     23             if(name==null)
     24                 break;
     25             out.println(name);
     26             String info=in.readLine();
     27             System.out.println("server:"+info);
     28             //如果验证成功,循环结束
     29             if(info.contains("欢迎"))
     30                 break;
     31         }
     32         //关闭资源
     33         bufr.close();
     34         s.close();
     35         
     36     }
     37 }
     38 class  UserThread implements Runnable
     39 {
     40     private Socket s;
     41     public UserThread(Socket s)
     42     {
     43         this.s=s;
     44     }
     45     public void run()
     46     {
     47         try
     48         {
     49             //获取客户端ip
     50             String ip=s.getInetAddress().getHostAddress();
     51             System.out.println(ip+"......connected.");
     52             //服务器最多提供三次验证服务
     53             for(int i=0;i<3;i++)
     54             {
     55                 BufferedReader in=
     56                     new BufferedReader(new InputStreamReader(s.getInputStream()));
     57                 //为读取服务器端的用户文件,建立输入流
     58                 BufferedReader bufr=new BufferedReader(new FileReader("user.txt"));
     59                 PrintWriter out=new PrintWriter(s.getOutputStream(),true);
     60                 //设置标志位,以便确定服务器需做出什么样的的动作
     61                 boolean flag=false;
     62                 String line=null;
     63                 String name=in.readLine();
     64                 if(name==null)
     65                     break;
     66                 while((line=bufr.readLine())!=null)
     67                 {
     68                     if(name.equals(line))
     69                     {
     70                         //如果在服务器的用户文件中找到客户输入的登录名
     71                         //改变标志位,结束循环
     72                         flag=true;
     73                         break;
     74                     }
     75                 }
     76                 //根据标志位不同,服务器做出不同动作
     77                 if(flag)
     78                 {
     79                     System.out.println(name+"已经登录");
     80                     out.println(name+"欢迎登陆!");
     81                     break;
     82                 }
     83                 else
     84                 {
     85                     System.out.println(name+"尝试登录");
     86                     out.println(name+",抱歉,用户名不存在!");
     87                 }
     88                 
     89 
     90             }
     91             //关闭资源
     92             s.close();
     93         }
     94         catch (Exception e)
     95         {
     96             e.printStackTrace();
     97         }
     98     }
     99 
    100     
    101 }
    102 class  LoginServer
    103 {
    104     public static void main(String[] args)throws Exception 
    105     {
    106         //建立服务器端
    107         ServerSocket ss=new ServerSocket(10008);
    108         while(true)
    109         {
    110             //循环接收客户请求
    111             Socket s=ss.accept();
    112             //为客户开启一个线程
    113             new Thread(new UserThread(s)).start();
    114         }
    115         
    116     }
    117 }
    View Code

     


    04 浏览器客户端-自定义服务端

     

    演示客户端和服务端
    客户端:浏览器
    服务器:自定义

     

     1 import java.net.*;
     2 import java.io.*;
     3 class  ServerDemo
     4 {
     5     public static void main(String[] args) throws Exception
     6     {
     7         ServerSocket ss=new ServerSocket(11000);
     8         Socket s=ss.accept();
     9         System.out.println(s.getInetAddress().getHostAddress());
    10         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
    11         out.println("<font color='blue' size=8>客户端你好!</font>");
    12         s.close();
    13         ss.close();
    14     }
    15 }
    View Code

    不过用telnet当做客户端实验时,我计算机可能没用这个应用,就没有成功。

    运行显示:
    D:abc>telnet 127.0.0.1 11000
    'telnet' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。

     


    05 浏览器客户端-Tomcat服务端

    客户端:浏览器

    服务端:Tomcat

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,

    在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

    对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,

    可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。

    实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,

    所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

    简要介绍我安装Tomcat的过程。

    1.下载。

    官方下载网址为:http://tomcat.apache.org/
    选择DownLoad--Tomcat6.0-32-bit/64-bit Windows Service Installer(pgp,md5)

    这个版本直接点击就可以安装。如果不需要改变安装路径,直接选择下一步就可以了。

    2.环境设置。

    变量名:JAVA-HOME

    变量值:SDK路径。

    3.启动

    启动Tomcat我们可以直接运行bin目录下的 Tomcat6.exe 可执行文件。

    在启动完成以后在浏览器中输入:http://127.0.0.1:8080 .显示如下

    在D: omcatwebapps路径下新建文件夹myWeb,再在此文件夹中新建文件Demo.html.

    文件内容:

     1 <html>
     2   <body>
     3       <h1>这是我的主页</h1>
     4       <font size=8 color=blue>欢迎登陆</font>
     5       <div>
     6           锦瑟无端五十弦,</br>
     7           一弦一柱思华年。</br>
     8           庄生晓梦迷蝴蝶,</br>
     9           望帝春心托杜鹃。</br>
    10           沧海月明珠有泪。</br>
    11           蓝田日暖玉生烟,</br>
    12           此情可待成追忆。</br>
    13           只是当时已惘然。</br>
    14     
    15         
    16       </div>
    17   </body>
    18 </html>
    View Code

    在浏览器中输入http://127.0.0.1:8080/myWeb/Demo.html,显示如下:

  • 相关阅读:
    Nginx设置支持Https
    windows git bash bash: xxx: command not found
    无法打开arxiv.org的解决办法
    divmod的妙用
    py2 to py3
    keras模型可视化
    python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    ubuntu “快捷方式”
    tf.keras遇见的坑:Output tensors to a Model must be the output of a TensorFlow `Layer`
    ImportError: Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
  • 原文地址:https://www.cnblogs.com/wsw-tcsygrwfqd/p/5136531.html
Copyright © 2011-2022 走看看