Java-简单的客户端和服务端(Socket)

主要使用两个类,分别是Socket 和 ServerSocket.
具体功能解释在注释上面

服务端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer{
	public static void main(String[] args){
		try{
			ServerSocket serverSocket = new ServerSocket(1080); //prot端口
			//用于监听客户端连接请求。若没有则一直等,连接成功后返回一个Socket对象
			Socket client = serverSocket.accept();
			//设置自动刷新的打印流在文件对象后面加true
			//out 是输出流,使用PrintWrite类方法
			PrintWriter out = new PrintWriter(client.getOutputStream(),true);
			//创建一个使用默认大小输入缓冲区的缓冲字符输入流in 作为输入流
			BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			String userIn;  //用户输入 userIn = in.readLine() 可以读取
			while ((userIn = in.readLine()) != null){
				System.out.println("收到客户端消息:"+userIn);
				//发回客户端
				out.println(userIn);	
			}
				
			}
		catch (IOException e){
				e.printStackTrace();
		}
	}
}

客户端

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

public class EchoClient{
	public static void main(String[] args){
		String hostname = "127.0.0.1"; //socket端口
		int port = 1080; // 设置port
		Scanner userIn = new Scanner(System.in);
		try{
			//建立Socket连接
			Socket socket = new Socket(hostname,port);
			//获取socket输出流
			PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
			//获取输入流
			BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			String userInput;
			System.out.println("请输入信息: ");
			//当用户输入exit时候退出
			while (!"exit".equals(userInput = userIn.nextLine())){
				out.println(userInput);
				System.out.println("收到服务端回应: "+in.readLine());	
			}
			//关闭socket
			socket.close();
			
		}catch (IOException e){
			e.printStackTrace();
		}
		
	}
}

创建两个terminal来测试。
一个是用户端,一个是服务端

输入Hello测试一下,发现用户端和服务端通信成功
Java-简单的客户端和服务端(Socket)_第1张图片

你可能感兴趣的:(JAVA)