首页 技术 正文
技术 2022年11月14日
0 收藏 804 点赞 3,365 浏览 6167 个字

Day24

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

01 TCP上传图片

 import java.net.*;
import java.io.*;
class PicClient
{
public static void main(String[] args) throws Exception
{
Socket s=new Socket("127.0.0.1",10007);
FileInputStream fis=new FileInputStream("E:\\图\\素材\\头像.jpg");
OutputStream os=s.getOutputStream();
byte[] buf=new byte[1024*16];
int len;
while((len=fis.read(buf))!=-1)
{
os.write(buf,0,len);
}
//告诉服务器数据写入完毕
s.shutdownOutput();
InputStream is=s.getInputStream();
byte[] bufIn=new byte[1024];
int num=is.read(bufIn);
System.out.println(new String(bufIn,0,num)); fis.close();
s.close(); }
}
class PicServer
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(10007);
Socket s=ss.accept();
System.out.println(s.getInetAddress().getHostAddress()+"......connected");
InputStream in=s.getInputStream();
byte[] buf=new byte[1024*16];
FileOutputStream fos=new FileOutputStream("touxiang.jpg");
int len;
while((len=in.read())!=-1)
{
fos.write(buf,0,len);
}
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
out.println("图片上传成功!"); fos.close();
s.close();
ss.close(); }
}

02 客户端并发上传图片

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

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

实现代码如下:

 /* */
import java.net.*;
import java.io.*;
class PicClient
{
public static void main(String[] args) throws Exception
{
//判断要上传的文件是否符合要求,不符合则结束运行
File file=new File(args[0]);
if(args.length!=1)
{
System.out.println("请上传一个文件,而不是多个!");
return;
}
if(!(file.exists() && file.isFile()))
{
System.out.println("文件不存在,或者文件有问题。");
return;
}
if(!(file.getName().endsWith(".png")))
{
System.out.println("请上传一个png格式的文件。");
return;
}
if(file.length()>1024*9)
{
System.out.println("上传文件大小超过允许范围!");
return;
} //建立Socket服务
Socket s=new Socket("172.29.115.1",10008);
//读取一个图片文件
FileInputStream fis=new FileInputStream(file);
byte[] buf=new byte[1024*9];
OutputStream out=s.getOutputStream();
int len=0;
//写入socket输出流中
while((len=fis.read(buf))!=-1)
{
out.write(buf,0,len); }
//给服务端一个信号,客户端输出结束
s.shutdownOutput(); //接受服务端的回馈信息
InputStream in=s.getInputStream();
byte[] b=new byte[1024];
int num=in.read(b);
System.out.println("server:"+new String(b,0,num)); //关闭资源
fis.close();
s.close(); }
}
class PicServerThread implements Runnable
{
private Socket s;
public PicServerThread(Socket s)
{
this.s=s;
}
public void run()
{
try
{
int count=1;
String ip=new String(s.getInetAddress().getHostAddress()+"");
System.out.println(ip+"......connected");
File file=new File(ip+"("+count+")");
//如果文件名已经存在,通过增加序号,定义新名字
//循环进行判断,直到找到没用过的文件名
while(file.exists())
file=new File(ip+"("+(count++)+")"+".png"); InputStream in=s.getInputStream();
FileOutputStream fos=new FileOutputStream(file); byte[] buf=new byte[1024*9];
int len;
//读取数据并写入到文件中
while((len=in.read(buf))!=-1)
{
fos.write(buf,0,len);
} //向客户端发送提示信息
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
pw.println("上传成功!"); //关闭资源
fos.close();
s.close(); }
catch (Exception e)
{
throw new RuntimeException("服务建立失败!");
} } }
class PicServer
{
public static void main(String[] args) throws Exception
{ //建立服务
ServerSocket ss=new ServerSocket(10008);
while(true)
{
//接收客户端端口
Socket s=ss.accept();
new Thread(new PicServerThread(s)).start(); } }
}

03 客户端并发登录

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

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

最多只能尝试登陆三次。

 import java.net.*;
import java.io.*;
class LoginClient
{
public static void main(String[] args)throws Exception
{
//建立服务
Socket s=new Socket("127.0.0.1",10008);
//获得键盘录入
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
//获得socket对应的输出流,设置为自动刷新
PrintWriter out=new PrintWriter(s.getOutputStream(),true); //获得socket对应的输入流
BufferedReader in=
new BufferedReader(new InputStreamReader(s.getInputStream()));
//最多只能尝试登陆三次
for(int x=0;x<3;x++)
{
String name=bufr.readLine();
//如果键盘录入为空(按下CTRL+C),循环结束
if(name==null)
break;
out.println(name);
String info=in.readLine();
System.out.println("server:"+info);
//如果验证成功,循环结束
if(info.contains("欢迎"))
break;
}
//关闭资源
bufr.close();
s.close(); }
}
class UserThread implements Runnable
{
private Socket s;
public UserThread(Socket s)
{
this.s=s;
}
public void run()
{
try
{
//获取客户端ip
String ip=s.getInetAddress().getHostAddress();
System.out.println(ip+"......connected.");
//服务器最多提供三次验证服务
for(int i=0;i<3;i++)
{
BufferedReader in=
new BufferedReader(new InputStreamReader(s.getInputStream()));
//为读取服务器端的用户文件,建立输入流
BufferedReader bufr=new BufferedReader(new FileReader("user.txt"));
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
//设置标志位,以便确定服务器需做出什么样的的动作
boolean flag=false;
String line=null;
String name=in.readLine();
if(name==null)
break;
while((line=bufr.readLine())!=null)
{
if(name.equals(line))
{
//如果在服务器的用户文件中找到客户输入的登录名
//改变标志位,结束循环
flag=true;
break;
}
}
//根据标志位不同,服务器做出不同动作
if(flag)
{
System.out.println(name+"已经登录");
out.println(name+"欢迎登陆!");
break;
}
else
{
System.out.println(name+"尝试登录");
out.println(name+",抱歉,用户名不存在!");
} }
//关闭资源
s.close();
}
catch (Exception e)
{
e.printStackTrace();
}
} }
class LoginServer
{
public static void main(String[] args)throws Exception
{
//建立服务器端
ServerSocket ss=new ServerSocket(10008);
while(true)
{
//循环接收客户请求
Socket s=ss.accept();
//为客户开启一个线程
new Thread(new UserThread(s)).start();
} }
}

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

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

 import java.net.*;
import java.io.*;
class ServerDemo
{
public static void main(String[] args) throws Exception
{
ServerSocket ss=new ServerSocket(11000);
Socket s=ss.accept();
System.out.println(s.getInetAddress().getHostAddress());
PrintWriter out=new PrintWriter(s.getOutputStream(),true);
out.println("<font color='blue' size=8>客户端你好!</font>");
s.close();
ss.close();
}
}

不过用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 .显示如下

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

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

文件内容:

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,405
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898