(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