加哇实验3

 待完善

package BIO;

import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class EchoServer {
    private static class ClientThread implements Runnable { // 客户端线程类
        private Socket client = null; // 客户端Socket
        private Scanner scan = null; // 输入流
        private PrintStream out = null; // 输出流
        private boolean flag = true; // 循环标记
        public ClientThread(Socket client) throws Exception { // 接收客户端Socket
            this.client = client; // 保存Socket
            this.scan = new Scanner(client.getInputStream()); // 输入流
            this.scan.useDelimiter("\n"); // 设置分隔符
            this.out = new PrintStream(client.getOutputStream()); // 输出流
        }
        @Override
        public void run() { // 线程执行
            while (this.flag) { // Echo循环处理
                if (scan.hasNext()) { // 有数据发送
                    String val = scan.next().trim(); // 接收数据
                    if ("byebye".equalsIgnoreCase(val)) { // 结束响应
                        out.println("ByeByeBye...."); // 回应信息
                        this.flag = false; // 结束循环
                    } else {
                        out.println("【ECHO】"+ val); // Echo信息
                    }
                }
            }
            try {
                scan.close(); // 关闭输入流
                out.close(); // 关闭输出流
                client.close(); // 关闭客户端
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(8080); // 设置服务监听端口
        System.out.println("等待客户端连接............."); // 打印提示信息
        boolean flag = true ; // 循环标记
        while (flag) {
            Socket client = server.accept() ; // 处于循环中,可以n个服务器连接n个服务端
            new Thread(new ClientThread(client)).start();
        }

        server.close(); // 关闭服务端
    }
}

 客户端

package BIO;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;

public class EchoClient {
    private static final BufferedReader KEYBOARD_INPUT = new BufferedReader(
            new InputStreamReader(System.in));
    public static String getString(String prompt) throws Exception { // 键盘信息输入
        System.out.print(prompt);
        String str = KEYBOARD_INPUT.readLine();
        return str;
    }
    public static void main(String[] args) throws Exception {
        Socket client = new Socket("localhost", 8080); // 定义服务端的连接信息
// 现在的客户端需要有输入与输出的操作支持,所以依然要准备出Scanner与PrintWriter
        Scanner scan = new Scanner(client.getInputStream()); // 接收服务端输入内容
        scan.useDelimiter("\n");
        PrintStream out = new PrintStream(client.getOutputStream()); // 向服务器端发送内容
        boolean flag = true; // 循环标记
        while (flag) { // 循环处理
            String input = getString("请输入要发送的内容:").trim(); // 获取键盘输入数据
            out.println(input); // 加换行
            if (scan.hasNext()) { // 服务器端有回应
                System.out.println(scan.next()); // 输出回应信息
            }
            if ("byebye".equalsIgnoreCase(input)) { // 结束判断
                flag = false; // 修改循环标记
            }
        }
        scan.close(); // 关闭输入流
        out.close(); // 关闭输 出流
        client.close(); // 关闭客户端
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值