(101)Tcp网络编程练习:上传文件、上传图片、用户登录
来源:互联网 发布:网络在线咨询 编辑:程序博客网 时间:2024/06/05 10:59
需求一上传文件
这个练习的难点是服务端的while不能结束,要通过以下三种方式可以使服务端知道文件已经上传完毕
package com.tcp4;import java.io.*;import java.net.*;import java.util.*;public class client4 { public static void main(String[] args)throws Exception { Socket s=new Socket("192.168.1.103",10003); //目的:服务端 BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); BufferedReader bufr=new BufferedReader(new FileReader("E:\\Circle.java")); String line=null; //第二种解决方式:时间戳(就是用时间作为结束标记,时间具有唯一性) //做法:获取某个时间,然后告诉服务端,这个时间,后面的做法和方法一相同 DataOutputStream dos=new DataOutputStream(s.getOutputStream()); long l=System.currentTimeMillis(); dos.writeLong(l); while((line=bufr.readLine())!=null) { bufw.write(line); bufw.newLine(); bufw.flush(); } //第三种做法(标准做法), s.shutdownOutput();//关闭客户端的输出流,相当于给流中加了结束标记-1 //第一种解决方式:用特定字符作为结束标记,当服务器端读到over一行时,代表读完,跳出循环,继续后面的操作 /* 但是若用特定的字符,容易和待复制的数据重复 * bufw.write("over"); bufw.newLine(); bufw.flush(); */ /*第二种方式(在输出流最后写时间戳,作为服务端读的结束标记) bufw.write(l+""); bufw.newLine(); bufw.flush(); */ BufferedReader bufrS=new BufferedReader(new InputStreamReader(s.getInputStream())); String str=bufrS.readLine(); System.out.println(str); bufr.close(); s.close(); }}package com.tcp4;import java.io.*;import java.net.*;import java.util.*;public class server4 { public static void main(String[] args)throws Exception { ServerSocket ss=new ServerSocket(10003); Socket s=ss.accept(); String ip=s.getInetAddress().getHostAddress(); System.out.println(ip+".....connect"); //从客户端读数据 BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream())); //写入文件中(而不是客户端了啊) BufferedWriter bufw=new BufferedWriter(new FileWriter("e:\\copy.java")); //第二种方式。从客户端获得时间戳 DataInputStream dis=new DataInputStream(s.getInputStream()); long l=dis.readLong(); String str=(l+""); String line=null; while((line=bufr.readLine())!=null) { //第一种解决方式 /*if("over".equals(line)) break; */ /*第二种方式 if(str.equals(line)) break; */ bufw.write(line); bufw.newLine(); bufw.flush(); } /* OutputStream out=s.getOutputStream(); byte[] buf="已经将文件复制成功哈哈哈哈".getBytes(); // System.out.println(buf.toString()); out.write(buf); */ BufferedWriter bufwS=new BufferedWriter (new OutputStreamWriter(s.getOutputStream())); bufwS.write("数据复制成功"); bufwS.newLine(); bufwS.flush(); bufw.close(); s.close(); }}
二、上传文件是以字符流方式上传的,下面以上传图片为例字节流演示
import java.io.*;import java.net.*;public class client5 { public static void main(String[] args)throws Exception { Socket s=new Socket("192.168.1.103",10011); //读文件 FileInputStream fis=new FileInputStream("e:\\a.png"); //目的,服务端(写) OutputStream out=s.getOutputStream(); int len=0; byte[]buf=new byte[1024]; while((len=fis.read(buf))!=-1) { out.write(buf,0,len); } s.shutdownOutput(); BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream())); String str=bufr.readLine(); System.out.println(str); fis.close(); s.close(); }}import java.io.*;import java.net.*;public class server5 { public static void main(String[] args)throws Exception { ServerSocket ss=new ServerSocket(10011); Socket s=ss.accept(); String ip=s.getInetAddress().getHostAddress(); System.out.println(ip+"......connected"); //从客户端读 InputStream in=s.getInputStream(); //写入磁盘中 FileOutputStream fos=new FileOutputStream("copy.png"); int len=0; byte[] buf=new byte[1024]; while((len=in.read(buf))!=-1) { fos.write(buf,0,len); } BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bufw.write("图片复制完毕"); bufw.newLine(); bufw.flush(); fos.close(); s.close(); ss.close(); }}
需求三
客户端通过键盘录入用户名。
服务端对这个用户名进行校验。
如果该用户存在,在服务端显示xxx,已登陆。
并在客户端显示 xxx,欢迎光临。
如果该用户存在,在服务端显示xxx,尝试登陆。
并在客户端显示 xxx,该用户不存在。
最多就登录三次。
import java.io.*;import java.net.*;public class client { public static void main(String[] args)throws Exception { Socket s=new Socket ("192.168.1.103",10008); BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)); //写入服务器 BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //读取从服务器端返回的数据 BufferedReader bufrS=new BufferedReader(new InputStreamReader(s.getInputStream())); String line=null; for(int x=0;x<3;x++) { System.out.println("请输入用户名"); line=bufr.readLine(); //写入服务器中 bufw.write(line); bufw.newLine(); bufw.flush(); //判断是否登录成功 String info=bufrS.readLine(); System.out.println("infor"+info); if(info.contains("欢迎光临")) { System.out.println(line+"该用户登陆成功"); break; } } s.close(); }}import java.io.*;import java.net.*;public class server { public static void main(String[] args)throws Exception { ServerSocket ss=new ServerSocket(10008); Socket s=ss.accept(); for(int x=0;x<3;x++) { //从客户端读 BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream())); //根据客户端数据读文件查询是否有这个人 FileReader fr=new FileReader("e:\\a.txt"); BufferedReader bfr=new BufferedReader(fr); //对客户端反馈数据(写) BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String name=bufr.readLine(); String line=null; boolean flag=false; while((line=bfr.readLine())!=null) { if(name.equals(line)) { flag=true; break; } } if(flag) { System.out.println(name+"已登陆登陆"); bufw.write(name+"欢迎光临"); bufw.newLine(); bufw.flush(); bfr.close(); break; } else { System.out.println(name+"尝试登陆"); bufw.write(name+"该用户不存在"); bufw.newLine(); bufw.flush(); } } s.close(); ss.close(); }}
阅读全文
0 0
- (101)Tcp网络编程练习:上传文件、上传图片、用户登录
- 网络编程(TCP上传图片文件)
- Java网络编程--TCP文件上传、图片上传示例
- JAVA 网络编程(TCP 上传图片)
- 网络编程应用:基于TCP协议【实现文件上传】--练习
- 网路编程(TCP练习:上传文件、并发访问、限制登录次数)
- 27-网络编程-17-网络编程(TCP协议-练习-上传图片客户端)
- 27-网络编程-18-网络编程(TCP协议-练习-上传图片服务端)
- 网络编程二:TCP传输、TCP双向传输、文本转换、并发上传图片、客户端并发登录
- 使用Tcp网络编程上传图片
- 使用Tcp网络编程上传图片。
- Java基础-网络编程(TCP-上传图片)
- Java网络编程Demo(二)TCP文件上传
- 网络编程上传图片
- 【tcp网络编程】TCP上传文件到服务器
- 黑马程序员-----网络编程中Tcp客户端并发上传图片
- 网络编程 TCP 入门以及如何上传图片
- 网络编程--文件上传
- 高精度加,减法算法
- 用python Tkinter编写简单的文件搜索工具
- spring reactor多线程配置
- linux时间编程之学习笔记-LS10
- BZOJ 4401 块的计数 [DFS序]
- (101)Tcp网络编程练习:上传文件、上传图片、用户登录
- recycleView的使用
- Flutter学习之旅(五)----网络请求获取数据、解析数据和显示等待动画
- 编写代码实现,模拟用户登录情景,并且只能登录三次,只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
- Java HashMap笔记之一:基本原理
- Linux下去掉^M的方法
- Java /封装/包装/必记的小部分内容
- [思维题] Ignatius and the Princess IV HDU
- 如何在 UWP 使用 wpf 的 Trigger