您的位置:首页 > 理论基础 > 计算机网络

网络编程3--毕向东java基础教程视频学习笔记

2017-03-12 16:45 1076 查看
转载地址http://www.cnblogs.com/wsw-tcsygrwfqd/p/5136531.html

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 }


 

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 }


 

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 }


 

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 }


不过用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>


 

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



 

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 }


 

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 }


 

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 }


 

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 }


不过用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>


 

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



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 网络编程