tcp的一点小问题顺便复习流

1、客户端上传文本文件到服务端

//## 客户端 ##
public static void uploadClient throws IOException(){

    //创建客户端Socket服务
    Socket s = new Socket("192.168.50.110",10000);

    //读取客户端的文本文件
    BufferedReader bufr = 
        new BufferedReader(new InputStreamReader(s.getInputStream()));

    //获取Socket输出流
    PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    /*强调一个知识点,PrintWriter(InputStream,true)和println、printf、format方法一起用时,则自动刷出缓冲区*/

    //开始读写
    String str = null;
    while((str=bufr.readLine())!=null) {
        out.println(str);
        //如果PrintWriter没有声明true,则该行代码应改为    
//      out.print(str+"\r\n");//或者println(str);
//      out.flush();
/*
1、因为客户端的in.readLine()方法是阻塞式的,而这边的数据又一直存在缓冲区没有刷出来,客户端那边就会一直处于阻塞状态。
2、print()写的时候缺少结束标记("\r\n"),所以要添加
*/  
    }

    //告诉客户端写完了
    s.shutdownOutput();

    //获取服务端返回数据
    BufferedReader bufIn = 
        new BufferedReader(new InputStreamReader(s.getInputStream()));
    String str1 = bufIn.readLine();
    System.out.println(str1);

    //关闭客户端和读取流
    bufr.close();
    s.close();

}

//## 服务端 ##(与客户端差不多啦)
public static void uploadServer throws IOException(){

    ServerSocket ss = new ServerSocket(10000);

    Socket s = ss.accept();

    BufferedWriter bufw = 
        new BufferedWriter(new FileWriter("D:\\server.txt"));

    BufferedReader bufIn = 
        new BufferedReader(new InputStreamReader(s.getInputStream()));
    String str = null;
    while((str=bufIn.readLine())!=null) {
        bufw.write(str);
        bufw.newLine();
        bufw.flush();
    }

    PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    out.println("接收完毕!上传成功!");

    ss.close();
    s.close();
    bufw.close();

}
//注意:这两个方法一定要是服务端先运行,再运行客户端,否则会报错

2、客户端上传音媒文件到服务端

//客户端
public  static void uploadPicClient throws IOException{

    final int SIZE = 1024;//SIZE的值不应该太大,会导致上传文件占用内存出错
    Socket s = new Socket("192.168.50.110",10000);

    FileInputStream  fis = new FileInputStream("D:\\client.png");

    OutputStream out = s.getOutputStream();

    byte[] buf = new byte[SIZE];
    int ch=0;
    while((ch=fis.read(buf))!=-1) {
        out.write(buf, 0, buf.length);
    }

    //告诉服务端结束了
    s.shutdownOutput();//- -注意不是shutdownInput()

    BufferedReader in  =
        new BufferedReader(new InputStreamReader(s.getInputStream()));

    String text = in.readLine();
    System.out.println(text);

    s.close();
    fis.close();
}

//服务端
public  static void uploadPicClient throws IOException{

    ServerSocket ss = new ServerSocket(10000);

    Socket s = ss.accept();

    FileOutputStream fos = new FileOutputStream("D:\\server.png");

    InputStream in = s.getInputStream();

    byte[] buf = new byte[SIZE];
    int ch=0;
    while((ch=in.read(buf))!=-1) {

        fos.write(buf, 0, buf.length);
    }

    PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    out.println("上传成功!");

    ss.close();
    s.close();
    fos.close();

}

猜你喜欢

转载自blog.csdn.net/qq_36589706/article/details/78990531
今日推荐