首先我们先创建一个服务端,共分为四步曲:

  1. 创建一个服务端
  2. 等待一个客户端的连接
  3. 处理客户端发送过来的数据
  4. 关闭服务端

代码当中给出了详细的信息:

import java.net.*;
import java.io.*;

public class Server {
	public static void main(String[] args) throws Exception {
		//1. 创建一个服务端
		ServerSocket server = createServer();
		//2. 等待一个客户端的连接
		Socket client = waitConnect(server);
		//3. 处理客户端发送过来的数据
		handleData(client);
		//4. 关闭服务端
		closeServer(server);
	}
	
	//实际上就是new了一个ServerSocket对象,参数为端口号(也可以改为其它的,比如9100),一会客户端会根据这个端口号+ip的方式来连接
	static ServerSocket createServer() throws Exception {
		return new ServerSocket(9000);
	}
	
	//调用accept方法来监听客户端的连接,这是一个阻塞方法,也就是说如果客户端一直不连接,这里就会一直等待
	static Socket waitConnect(ServerSocket server) throws Exception {
		return server.accept();
	}
	
	//跟客户端建立连接之后就好办了,可以根据你的需要处理一些东西,这里只是把客户端发送的数据打印出来,也可以换成你自己的逻辑
	static void handleData(Socket client) throws Exception {
		InputStream in = client.getInputStream();
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len;
		//read方法是阻塞方法,这就确保了如果客户端要发送一些数据,服务端总是能在客户端发送完了所有的数据之后,再获得客户端发送过来的数据,具体不再赘述
		while ((len = in.read(buffer)) != -1)
			out.write(buffer, 0, len);
		System.out.println(out.toString());
	}
	
	//最后就是关闭服务端
	static void closeServer(ServerSocket server) throws Exception {
		server.close();
	}
}

然后我们再创建一个客户端,共分为三步曲:

  1. 创建一个客户端(也就连接了一个服务端)
  2. 给服务端发送一些数据
  3. 关闭客户端

代码当中给出了详细的信息:

import java.net.*;
import java.io.*;

public class Client {
	public static void main(String[] args) throws Exception {
		//1. 创建一个客户端(也就连接了一个服务端)
		Socket client = createClient();
		//2. 给服务端发送一些数据
		sendData(client);
		//3. 关闭客户端
		closeClient(client);
	}
	
	//实际上就是new了一个Socket对象,第一个参数是ip地址,127.0.0.1代表本机地址,端口号也就是服务端指定的那个端口号了,当创建了这个对象之后实际上也就连接上了服务端
	static Socket createClient() throws Exception {
		return new Socket("127.0.0.1", 9000);
	}
	
	//可以根据你自己的需求,写一些逻辑,这里只是给服务端发送了一些数据
	static void sendData(Socket client) throws Exception {
		PrintWriter out = new PrintWriter(client.getOutputStream());
		out.println("Hello, server!");
		out.close();
	}
	
	//关闭客户端
	static void closeClient(Socket client) throws Exception {
		client.close();
	}
}

注意:要先运行服务端,然后再运行客户端