网络编程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:\tomcat\webapps路径下新建文件夹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,显示如下:

 

posted @ 2016-01-19 20:40  沐一  阅读(714)  评论(0编辑  收藏  举报