java网络编程——经典echo程序

1.客户端

public class Client {
	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", 9995); // 定义服务端的连接信息
// 现在的客户端需要有输入与输出的操作支持,所以依然要准备出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(); // 关闭客户端
	}
}

2.服务端

public class Server{
	public static void main(String[] args) throws Exception {
		
		ServerSocket server = new ServerSocket(9995); // 设置服务监听端口
		System.out.println("等待客户端连接............."); // 打印提示信息
		Socket client = server.accept(); // 等待客户端连接
// 首先需要先接收客户端发送来的信息,而后才可以将信息处理之后发送回客户端
		Scanner scan = new Scanner(client.getInputStream()); // 客户端输入流
		scan.useDelimiter("\n"); // 设置分隔符
		PrintStream out = new PrintStream(client.getOutputStream()); // 客户端输出流
		boolean flag = true; // 循环标记
		while (flag) {
			if (scan.hasNext()) { // 有数据接收
				String val = scan.next().trim(); // 接收数据内容
				if ("byebye".equalsIgnoreCase(val)) { // 结束标记
					out.println("ByeByeBye...."); // 回应信息
					flag = false; // 结束循环
				} else {
					out.println("【ECHO】" + val); // Echo信息
				}
			}
		}
		scan.close(); // 关闭输入流
		out.close(); // 关闭输出流
		client.close(); // 关闭客户端
		server.close(); // 关闭服务端
	}
}

(1)ServerSocket设置监听端口
(2)Socket 包含5个部分(TCP协议,本地ip,本地端口(1~65535),远程ip,远程端口)在客户端中一般只要后两个信息就可以创建一个Socket插口
1)serverSocket.accept()在服务端中跟在ServerSocket后边等待客户端的连接;
2) 在客户端中,通过服务端的ip与端口来接入服务端* 后边就是各自设置输入与输出的放置。
3.Socket的四种声明方式_____目前只在客户端中需要声明要连接的服务端以及端口在哪,而服务端中只用连接自个声明的固定端口就行了。

Socket(InetAddress address, int port) throws UnknowHostException, IOException

Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException

Socket(String host, int port) throws UnknowHostException, IOException

Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException

4.InetAddress是ip地址,三种获得方式`

//返回本地主机的IP地址
  InetAddress addr1 = InetAddress.getLocalHost();
  //返回代表 "222.34.5.7"的 IP地址
  InetAddress addr2 = InetAddress.getByName("222.34.5.7");
  //返回域名为"www.javathinker.org"的 IP地址
  InetAddress addr3 = InetAddress.getByName("www.javathinker.org");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值