Java 网络编程(Echo程序)

本文介绍了如何使用Java进行网络编程,通过创建Echo服务器和客户端来实现数据的传递。重点在于处理多轮次输入,当接收到特定字符串"end"时终止通信。

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

本程序设计如下:

·由于需要采用多次输入形式,所以不能够每次连接后立刻关闭服务器端;

·可以设置一个字符串:如果输入"end",那么才结束本次的Echo操作;

范例1:定义服务器端

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

class EchoThread implements Runnable {
	private Socket client;

	public EchoThread(Socket client) {
		this.client = client;
	}

	@Override
	public void run() {
		try {
			Scanner scan = new Scanner(client.getInputStream());
			PrintStream out = new PrintStream(client.getOutputStream());
			boolean flag = true;// 控制多次连接操作
			while (flag) {
				if (scan.hasNext()) {
					String str = scan.next().trim();// 得到客户端发送的信息
					if ("end".equalsIgnoreCase(str)) {// 程序结束条件
						out.println("Server's shut down,See you later!");
						flag = false;// 退出循环
					} else {// 应该回应输入信息
						out.println("ECHO:" + str);
					}
				}
			}
			scan.close();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

public class EchoServer {
	public static void main(String[] args) throws Exception {// 此处直接抛错
		ServerSocket server = new ServerSocket(9999);
		System.out.println("等待客户端连接....");
		boolean flag = true;
		while (flag) {
			Socket cilent = server.accept();// 等待客户端连接
			new Thread(new EchoThread(cilent)).start();
		}
		server.close();

	}

}

范例2:定义客户端

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

public class EchoClient {

	public static void main(String[] args) throws Exception {// 直接抛出异常
		Socket client = new Socket("localhost", 9999);// 连接服务器端
		Scanner input = new Scanner(System.in);
		Scanner scan = new Scanner(client.getInputStream());
		PrintStream out = new PrintStream(client.getOutputStream());
		input.useDelimiter("\n");
		scan.useDelimiter("\n");
		boolean flag = true;
		while (flag) {
			System.out.println("请输入要发送的指令:");
			if (input.hasNext()) {
				String str = input.next().trim();
				out.println(str);// 发送服务器数据
				if ("end".equalsIgnoreCase(str)) {
					flag = false;// 循环结束
				}
				if (scan.hasNext()) {
					System.out.println(scan.next());// 输出回应数据
				}
			}
		}
		input.close();
		scan.close();
		out.close();
		client.close();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值