Java基于TCP的Scoket实现一对一聊天功能

该博客展示了如何使用Java的ServerSocket和Socket类创建一个简单的客户端-服务器聊天应用程序。服务器端监听9999端口,等待客户端连接,并通过BufferedReader和BufferedWriter进行信息交换。客户端连接到服务器并持续接收和发送消息。示例代码详细解释了通信流程。
摘要由CSDN通过智能技术生成

效果展示

在这里插入图片描述
在这里插入图片描述

服务器端

public class ServerSocketDemo {
	public static void main(String[] args) {
		try {
			// 创建 Scanner 对象
			Scanner input = new Scanner(System.in);
			// 创建 ServerSocket 对象
			ServerSocket serverSocket = new ServerSocket(9999);
			// 等待客户端的连接
			System.out.println("等待客户端的连接...");
			// 当客户端连接成功后,会得到 Socket 对象
			Socket socket = serverSocket.accept();
			// 获得当前客户端的 IP 地址
			String clientIP = socket.getInetAddress().getHostAddress();
			System.out.println("【" + clientIP + "】连接成功..." + new Date());
			// 通过 Socket 对象获得 InputStream 和 OutputStream
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			// 借助于 InputStream 和 OutputStream 获得 BufferedReader 和 BufferedWriter
			InputStreamReader isr = new InputStreamReader(in);
			BufferedReader br = new BufferedReader(isr);
			OutputStreamWriter osw = new OutputStreamWriter(out);
			BufferedWriter bw = new BufferedWriter(osw);
			
			// 通过 BufferedWriter 向客户端发送连接成功信息
			bw.write("服务端连接成功..." + new Date());
			bw.newLine();
			bw.flush();
			
			// 循环接收和发送信息
			while (true) {
				// 接收来自服务端的信息
				System.out.println("来自【" + clientIP + "】的信息 (" + new Date() + ") :" + br.readLine());
				// 通过控制台输入信息并且进行发送
				bw.write(input.next());
				bw.newLine();
				bw.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

客户端

public class SocketDemo {
	public static void main(String[] args) {
		try {
			// 创建 Scanner 对象
			Scanner input = new Scanner(System.in);
			// 创建 Socket 对象
			Socket socket = new Socket("127.0.0.1", 9999);
			// 通过 Socket 对象获得 InputStream 和 OutputStream
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			// 借助于 InputStream 和 OutputStream 获得 BufferedReader 和 BufferedWriter
			InputStreamReader isr = new InputStreamReader(in);
			BufferedReader br = new BufferedReader(isr);
			OutputStreamWriter osw = new OutputStreamWriter(out);
			BufferedWriter bw = new BufferedWriter(osw);
			
			// 为了是聊天循环进行下去,那么使用 while 循环
			while (true) {
				// 接收来自服务端的信息
				System.out.println("来自【服务端】的信息 (" + new Date() + ") :" + br.readLine());
				// 通过控制台输入信息并且进行发送
				bw.write(input.next());
				bw.newLine();
				bw.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值