Socket实现服务器端与客户端之间通信(输入文字聊天)

用Socket实现与同桌聊天

  • 需求:
    键盘输入文字使服务器端与客户端可以实现文字通信。

使用的是TCP协议。

TCP协议

  1. 客户端
  • 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
  • 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
  • 输入流可以读取服务端输出流写出的数据
  • 输出流可以写出数据到服务端的输入流
  1. 服务端
  • 创建ServerSocket(需要指定端口号)
  • 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
  • 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
  • 输入流可以读取客户端输出流写出的数据
  • 输出流可以写出数据到客户端的输入流

步骤

新建Server类:

package com.briup.day25;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server4 {
     
	public static void main(String[] args) throws Exception {
     
		ServerSocket server = new ServerSocket(9009);
		Scanner sc = new Scanner(System.in);
		while (true) {
     
			System.out.println("server:");
			Socket socket = server.accept();
			InputStream is = socket.getInputStream();
			OutputStream os = socket.getOutputStream();
			BufferedReader br = 
					new BufferedReader(
							new InputStreamReader(is));
			PrintWriter pw = new PrintWriter(os, true);

			String line;
			while ((line = br.readLine()) != null) {
     
				System.out.println(line);
				pw.println("客服小姐姐:" + sc.nextLine());
			}
			socket.close();

		}
	}
}

运行结果:
Socket实现服务器端与客户端之间通信(输入文字聊天)_第1张图片

新建Client类:

package com.briup.day25;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {
     
	public static void main(String[] args) throws Exception {
     
		Scanner sc = new Scanner(System.in);
		Socket socket = new Socket("127.0.0.1", 9009);
		InputStream is = socket.getInputStream();
		OutputStream os = socket.getOutputStream();
		PrintWriter pw = new PrintWriter(os, true);
		BufferedReader br = 
				new BufferedReader(
						new InputStreamReader(is));

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

			pw.println("wuct:" + line);

			if ("exit".equals(line)) {
     
				break;
			}
			System.out.println(br.readLine());

		}
		socket.close();

	}
}

运行结果:
Socket实现服务器端与客户端之间通信(输入文字聊天)_第2张图片

总结

学习了通信,看着控制台一来一回的消息,感觉很神奇,很开心。

你可能感兴趣的:(Java核心基础学习,项目经验,Socket通信,Java,TCP协议,服务器端,客户端)