tcp(Test)

本文介绍两个Java网络编程案例:一是实现客户端输入字符串由服务器反转后返回;二是客户端上传文件到服务器,服务器检查文件是否存在并接收文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Test1_Client {

/**
 * 客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到是反转后的字符串
 * @throws IOException 
 * @throws UnknownHostException 
 */
public static void main(String[] args) throws UnknownHostException, IOException {
    Scanner sc = new Scanner(System.in);                //创建键盘录入对象
    Socket socket = new Socket("127.0.0.1", 54321);     //创建客户端,指定ip地址和端口号

    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取输入流
    PrintStream ps = new PrintStream(socket.getOutputStream());//获取输出流

    ps.println(sc.nextLine());                          //将字符串写到服务器去
    System.out.println(br.readLine());                  //将反转后的结果读出来

    socket.close();
}

}

public class Test1_Server {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    ServerSocket server = new ServerSocket(54321);
    System.out.println("服务器启动,绑定54321端口");

    while(true) {
        final Socket socket = server.accept();                  //接受客户端的请求

        new Thread() {                                          //开启一条线程
            public void run() {
                try {
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取输入流
                    PrintStream ps = new PrintStream(socket.getOutputStream());//获取输出流

                    String line = br.readLine();                //将客户端写过来的数据读取出来
                    line = new StringBuilder(line).reverse().toString();    //链式编程
                    ps.println(line);                           //反转后写回去

                    socket.close();
                } catch (IOException e) {                       

                    e.printStackTrace();
                }
            }
        }.start();
    }
}

}

public class Test2_UpdateClient {

/**
 * @param args
 * @throws IOException 
 * @throws UnknownHostException 
 */
public static void main(String[] args) throws UnknownHostException, IOException {
    // 1.提示输入要上传的文件路径, 验证路径是否存在以及是否是文件夹
    File file = getFile();
    // 2.发送文件名到服务端
    Socket socket = new Socket("127.0.0.1", 12345);
    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintStream ps = new PrintStream(socket.getOutputStream());
    ps.println(file.getName());
    // 6.接收结果, 如果存在给予提示, 程序直接退出
    String result = br.readLine();                      //读取存在后不存在的结果
    if("存在".equals(result)) {
        System.out.println("您上传的文件已经存在,请不要重复上传");
        socket.close();
        return;
    }
    // 7.如果不存在, 定义FileInputStream读取文件, 写出到网络
    FileInputStream fis = new FileInputStream(file);
    byte[] arr = new byte[8192];
    int len;

    while((len = fis.read(arr)) != -1) {
        ps.write(arr, 0, len);
    }

    fis.close();
    socket.close();
}

private static File getFile() {
    Scanner sc = new Scanner(System.in);                //创建键盘录入对象
    System.out.println("请输入一个文件路径:");

    while(true) {
        String line = sc.nextLine();
        File file = new File(line);

        if(!file.exists()) {
            System.out.println("您录入的文件路径不存在,请重新录入:");
        }else if(file.isDirectory()) {
            System.out.println("您录入的是文件夹路径,请输入一个文件路径:");
        }else {
            return file;
        }
    }
}

}

public class Test2_UpdateServer {

/**
 * @param args
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {
    //3,建立多线程的服务器
    ServerSocket server = new ServerSocket(12345);
    System.out.println("服务器启动,绑定12345端口号");

    //4.读取文件名
    while(true) {
        final Socket socket = server.accept();                  //接受请求
        new Thread() {
            public void run() {
                try {
                    InputStream is = socket.getInputStream();
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    PrintStream ps = new PrintStream(socket.getOutputStream());
                    String fileName = br.readLine();

                    //5.判断文件是否存在, 将结果发回客户端
                    File dir = new File("update");
                    dir.mkdir();                                //创建文件夹
                    File file = new File(dir,fileName);         //封装成File对象

                    if(file.exists()) {                         //如果服务器已经存在这个文件
                        ps.println("存在");                       //将存在写给客户端
                        socket.close();                         //关闭socket
                        return;
                    }else {
                        ps.println("不存在");
                    }

                    //8.定义FileOutputStream, 从网络读取数据, 存储到本地
                    FileOutputStream fos = new FileOutputStream(file);
                    byte[] arr = new byte[8192];
                    int len;

                    while((len = is.read(arr)) != -1) {
                        fos.write(arr, 0, len);
                    }

                    fos.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值