Socket与ServerSocket
ServerSocket用来代表服务器端的Socket,也就是服务器端的端点
Socket就是客户端的端口
首先,当我们创建一个ServerSocket的时候,要先提供一个端口,实现端口的绑定,一旦绑定之后,这个ServerSocket就可以作为服务端的端口,服务器就会一直监听这个端口。
然后会调用一个叫accept的函数,accept是一个阻塞式的调用,所谓阻塞式的调用,就是它会等待任何一个客户端来跟它建立连接,当没有客户端来建立连接的时候,accept就会一直等待。
一旦客户端,创建一个Socket对象,是用来表达客户端的端点的,客户端生成的一个Socket可以要求跟服务端进行连接。
一旦服务端接受了客户端的连接,这个accept就会返回一个Socket,这个端点就可以跟客户端的端点进行沟通。
实现ServerSocket
import java.io.*;import java.net.ServerSocket;import java.net.Socket;public class Server {public static void main(String[] args) {final String QUIT = "quit";final int DEFAULT_POST = 8888;ServerSocket serverSocket = null;try {// 绑定监听端口serverSocket = new ServerSocket(DEFAULT_POST);System.out.println("启动服务器,监听端口" + DEFAULT_POST);while (true){//等待客户端连接,一旦有客户端连接上了,就会返回一个Socket,这个Socket就是客户端的端点Socket socket = serverSocket.accept();System.out.println("客户端[" + socket.getPort() + "]已连接");BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));String msg = null;while ((msg = reader.readLine()) != null){System.out.println("客户端[" + socket.getPort() + "]:" + msg);//回复客户发送的消息writer.write("服务器:" + msg + "\n");writer.flush();//查看客户端是否退出if (QUIT.equals(msg)){System.out.println("客户端[" + socket.getPort() + "]已退出");break;}}}} catch (IOException e) {e.printStackTrace();}finally {if (serverSocket != null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}}
